json中特定国家/地区的返回数组[重复]

Posted

技术标签:

【中文标题】json中特定国家/地区的返回数组[重复]【英文标题】:Return array for specific country in json [duplicate] 【发布时间】: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 【参考方案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。度过了漫长的一天!

以上是关于json中特定国家/地区的返回数组[重复]的主要内容,如果未能解决你的问题,请参考以下文章

地区、国家、城市从 CSV 中的 Javascript 排序

我们如何从特定国家/地区获取推文

从4级json对象的数组中返回特定的json项

返回除特定索引外的数组索引[重复]

遍历一个url数组并将它们传递给get_json,返回新的数据数组[重复]

PHP json_encode将行作为对象而不是数组返回[重复]