【问题标题】:Return array for specific country in json [duplicate]json中特定国家/地区的返回数组[重复]
【发布时间】:2020-03-10 08:19:46
【问题描述】:

我试图找到我遇到的类似问题但没有找到。

这是我的 json:

{
        "name": "United States",
        "code": "US",
        "label": "State",
        ...
        "province_codes": {
          "Alabama": "AL",
           "Alaska": "AK",
           "American Samoa": "AS",
           "Arizona": "AZ",
           "Arkansas": "AR",
           ...
        }
}

取自这个 json repo https://raw.githubusercontent.com/JohnBendfeldt/country-province-data/master/countries.json

我正在尝试仅获取美国并获取 province_codes 密钥并将其放入我的反应组件的新数组中。我已经尝试了以下方法。

const states = [];
countryProvinceData.forEach(field => {
            if (field.name === "United States") {
                field.province_codes.map(code => {
                    states.push({
                        value: code, //Abbreviated state
                        label: code + " (" + code + ")" //full name and abbreviation in brackets
                    });
                });
            }
        });

        this.setState({ states });

但它给了我这个错误:TypeError: field.province_codes.map is not a function

希望有人能提供帮助或指导。

【问题讨论】:

  • map 是数组原型的函数,province_codes 似乎不是数组
  • 另外,一般来说,当您只对副作用感兴趣时,不要使用map。使用forEach。它会让你的意图变得清晰。
  • 我也尝试过 forEach 并返回相同的错误。我知道它不是一个数组,它是一个对象。
  • 好吧,forEach 当然不适用于您当前的代码。我的观点是一旦你有一个数组(通过迭代,例如Object.keys)如果你只对副作用感兴趣,请使用forEach 而不是map

标签: javascript reactjs


【解决方案1】:

province_codes 是一个对象,但 map 是一个 Array 原型的函数,要遍历对象的键,您需要使用 for inObject.keys

Object.keys(field.province_codes).forEach(code => {
  states.push({
    value: code, //Abbreviated state
    label: code + " (" + field.province_codes[code] + ")" //full name and abbreviation in brackets
  });
})

【讨论】:

  • 感谢您的指导。很困惑为什么它会返回那个错误并且它缺少Object.keys。度过了漫长的一天!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 1970-01-01
  • 2019-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多