我正在尝试将.json中的每个“百分比”值保存到数组中:
此代码目前正在运行:
let percentage = []
for(var key in res['data']){
percentage.push(res['data'][key].percentage);
}
但是我觉得我可以改进它,只使用一行。我尝试像过去那样将值映射到变量:
let percentage = res['data'].map(res => res.percentage);
但是相反,我收到“ TypeError:res.data.map不是函数”错误。如何改善我的代码以将其仅映射到这样的一行?:
答案 0 :(得分:4)
data
是对象,而不是数组,因此不能在其上调用map
。但是,您可以改用Object.values
:
const res = {
data: {
0: {
percentage: 8.1
},
1: {
percentage: 47
},
2: {
percentage: 87
}
}
};
const percentage = Object.values(res.data).map(({ percentage }) => percentage);
console.log(percentage);
答案 1 :(得分:2)
map函数。由于您输入的是对象,因此请使用Object.values。
Object.values(res.data).map(({ percentage }) => percentage);
答案 2 :(得分:2)
一种简单快捷的方法是使用lodash库(使用npm来获取它)
其中将有一个_.map方法,您可以像这样直接使用
_.map(res.data, (obj) => obj.percentage)
这里很多人建议的另一种方法是,为什么要使用它:
1-这里的第一件事是for..in的使用,它也迭代对象的原型链属性。 在mozilla页面上:
Object.values()方法返回给定对象自己的数组 可枚举的属性值,其顺序与 for ... in循环(区别是for-in循环枚举 原型链中的属性)。
因此,您应该使用Object.values仅获取其自己的枚举。
2-一旦将值作为列表,就可以在其上运行地图功能。 在此,在传递给map的箭头函数中,执行对象解构{propertyName}(特定于ES6)以将属性提取到propertyName变量。
因此,代码将变为:
Object.values(res.data)
.map( ({percentage}) => percentage)
我希望这一切都可以清除。 EOD。
答案 3 :(得分:1)
data
不是数组,因此不能在数组以外的对象上实现map()
。您必须使用Object.values()
来实现map()
:
let percentage = Object.values(res.data).map(res => res.percentage);
答案 4 :(得分:1)
您可以执行Object.values,然后在其上使用map
let resp = {
"data": {
"0": {
"percentage": 8.1
},
"1": {
"percentage": 9.1
},
"2": {
"percentage": 10.1
}
}
}
let perc = Object.values(resp.data).map(function(item) {
return item.percentage;
})
console.log(perc)
答案 5 :(得分:0)
res.data
是一个对象,而不是数组,因此目前没有map
方法可用。
由于您的data
对象具有数字键,因此您可以使用Object.assign
轻松地将其转换为数组,然后进行映射。您还可以使用destructuring来稍微缩短映射功能:
let percentage = Object.assign([], res.data).map(({percentage}) => percentage);