javascript - 如何从这个 JSON 结果中过滤掉特定的地址类型而不需要空数组?

标签 javascript json functional-programming

我有以下示例 JSON,并且想要检索与特定 address_components.types 匹配的结果。我尝试的方法成功检索了结果,但它将包含一些空数组。如何编辑它以仅返回 2 个匹配的数组,而不返回 4 个空数组?最好采用 ES5 语法。

var sample = {
  "results": [{
    "address_components": [{
      "long_name": "33",
      "short_name": "33",
      "types": [
        "street_number"
      ]
    }, {
      "long_name": "Parking Road",
      "short_name": "Parking Road",
      "types": [
        "route"
      ]
    }, {
      "long_name": "Welling Park",
      "short_name": "Welling Park",
      "types": [
        "political",
        "sublocality",
        "sublocality_level_1"
      ]
    }, {
      "long_name": "Jill Town",
      "short_name": "JT",
      "types": [
        "locality",
        "political"
      ]
    }, {
      "long_name": "Perak",
      "short_name": "Perak",
      "types": [
        "administrative_area_level_1",
        "political"
      ]
    }, {
      "long_name": "Malaysia",
      "short_name": "MY",
      "types": [
        "country",
        "political"
      ]
    }, {
      "long_name": "46666",
      "short_name": "46666",
      "types": [
        "postal_code"
      ]
    }]
  }]
}

var filtered = sample.results[0].address_components.map(function(address) {
  return address.types.filter(function(type) {
    return type === 'route' || type === 'sublocality_level_1'
  }).map(function() {
    return address;
  });
})

console.log(filtered);

最佳答案

首先过滤出您想要的内容!

var filtered = sample.results[0].address_components.filter(function(address) {
  return address.types.indexOf('route') > -1 || address.types.indexOf('sublocality_level_1') > -1;
})

下面的工作示例。

var sample = {
  "results": [{
    "address_components": [{
      "long_name": "33",
      "short_name": "33",
      "types": [
        "street_number"
      ]
    }, {
      "long_name": "Parking Road",
      "short_name": "Parking Road",
      "types": [
        "route"
      ]
    }, {
      "long_name": "Welling Park",
      "short_name": "Welling Park",
      "types": [
        "political",
        "sublocality",
        "sublocality_level_1"
      ]
    }, {
      "long_name": "Jill Town",
      "short_name": "JT",
      "types": [
        "locality",
        "political"
      ]
    }, {
      "long_name": "Perak",
      "short_name": "Perak",
      "types": [
        "administrative_area_level_1",
        "political"
      ]
    }, {
      "long_name": "Malaysia",
      "short_name": "MY",
      "types": [
        "country",
        "political"
      ]
    }, {
      "long_name": "46666",
      "short_name": "46666",
      "types": [
        "postal_code"
      ]
    }]
  }]
}

var filtered = sample.results[0].address_components.filter(function(address) {
  return address.types.indexOf('route') > -1 || address.types.indexOf('sublocality_level_1') > -1;
})

console.log(filtered);

关于javascript - 如何从这个 JSON 结果中过滤掉特定的地址类型而不需要空数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40590971/

相关文章:

javascript - Concat Angular 2 条路线

javascript - 使用 RequireJS 动态添加 Brightcove 视频播放器

php - 使用 php mysql 创建嵌套的 json 对象

php - 将多维 JSON 数组传递给 jQuery 函数

Java从HTTP正文中读取json

java - 如何将 Streams Prev 元素结果传递给下一个

java - 在实例参数上调用实例方法引用

functional-programming - Elixir Enum.map 与理解

javascript - 嵌套 iframe,又名 Iframe Inception

javascript - Dojo 数据网格 : set conditionally editable column (change at runtime)