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 in
或 Object.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 排序