javascript - 给定一个 JSON 对象数组,如何根据嵌套值获取 JSON 对象 X?

标签 javascript arrays json node.js parsing

我正在使用google maps geocoding api根据地址获取以下 JSON 对象:

{
    "results":[
        {
            "address_components":[
                {
                    "long_name":"643",
                    "short_name":"643",
                    "types":[
                        "subpremise"
                    ]
                },
                {
                    "long_name":"900",
                    "short_name":"900",
                    "types":[
                        "street_number"
                    ]
                },
                {
                    "long_name":"Folsom Street",
                    "short_name":"Folsom St",
                    "types":[
                        "route"
                    ]
                },
                {
                    "long_name":"South of Market",
                    "short_name":"South of Market",
                    "types":[
                        "neighborhood",
                        "political"
                    ]
                },
                {
                    "long_name":"San Francisco",
                    "short_name":"SF",
                    "types":[
                        "locality",
                        "political"
                    ]
                },
                {
                    "long_name":"San Francisco County",
                    "short_name":"San Francisco County",
                    "types":[
                        "administrative_area_level_2",
                        "political"
                    ]
                },
                {
                    "long_name":"California",
                    "short_name":"CA",
                    "types":[
                        "administrative_area_level_1",
                        "political"
                    ]
                },
                {
                    "long_name":"United States",
                    "short_name":"US",
                    "types":[
                        "country",
                        "political"
                    ]
                },
                {
                    "long_name":"94107",
                    "short_name":"94107",
                    "types":[
                        "postal_code"
                    ]
                },
                {
                    "long_name":"1007",
                    "short_name":"1007",
                    "types":[
                        "postal_code_suffix"
                    ]
                }
            ]
        }
    ]
}

问题

如何获得long_nameshort_name address_components 中的一个对象基于特定类型的数组?

示例

我想要long_name short_name那些具有 "locality" 的对象在他们的 types数组。

上下文

我正在使用此信息使用 Node.js、express 和 mongodb 构建一个“公寓查找器”应用程序。

注意事项

我读到下划线库对此很有用。

编辑:我的想法

所以,我知道如何搜索 address_components大批。 (我可以通过 results[0] 访问它),并且我相信我可以访问 types按点表示法数组,但我想搜索所有 types每个对象的数组,当我找到一个对象时返回,比如说 types包含“位置”。我怎样才能做到这一点?

我在解析/循环 JSON 方面没有那么丰富的经验。我在学习。任何帮助是极大的赞赏。谢谢!

最佳答案

您可以使用嵌套的 .filter 来获取包含该过滤器的对象,并结合 .map 创建匹配对象的数组:

var objectsContainingConditions = data.results[0].address_components.filter(function(item) {
    return item.types.filter(function(addressType) {
        return addressType == "locality";
    }).length > 0;
}).map(function(item) {
    return {
        long: item.long_name,
        short: item.short_name
    }
});

如果您想重用它,请将其放入函数并传递类型:

function queryGoogleComponentsByType(type, components) {
    return components.filter(function(item) {
        return item.types.filter(function(addressType) {
            return addressType == type;
        }).length > 0;
    }).map(function(item) {
        return {
            long: item.long_name,
            short: item.short_name
        }
    });
}

var results = queryGoogleComponentsByType("locality", data.results[0].address_components);

演示:http://jsfiddle.net/upzjth30/

关于javascript - 给定一个 JSON 对象数组,如何根据嵌套值获取 JSON 对象 X?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30178497/

相关文章:

javascript - drawImage() 未绘制预加载的图像对象。使用面向对象的javascript

javascript - 测试 JavaScript 中的 Promise 处理不起作用

javascript - 如何用值检索键

javascript - 操作外部js文件中的Vue数据

javascript - 移动 JavaScript 事件多次触发

javascript - 使用 lodash 将 JSON 转换为对象数组

javascript - 获取数组中具有多个位置的值的索引

javascript - 如何在 JavaScript 中将给定矩阵顺时针旋转一个元素

jquery - 从我的函数中删除 HTML

python - 使用 python 将数据附加到 JSON 文件