我正在尝试将我的循环数据添加到对象中。
subItem.allAvgObj = {};
for(var i = 0; i < subItem.implementations.length; i++) {
if (subItem.implementations[i].avg_score) {
Object.assign(subItem.allAvgObj, {
scoreAvg: subItem.implementations[i].avg_score,
scorePonderation: subItem.implementations[i].ponderation,
})
}
}只是,我的循环中只有最后一个对象是赋值的。
{
"scoreAvg": 8,
"scorePonderation": 10
}我尝试使用一个数组,它可以工作(但它是一个只有一个值的数组,但是循环可以工作)
subItem.allAvgArray.push(subItem.implementations[i].avg_score);返回:
[
13.5,
16,
8
]我怎么才能做出这样的对象呢?
{
"scoreAvg": 13.5,
"scorePonderation": 20
},
{
"scoreAvg": 16,
"scorePonderation": 20
},
{
"scoreAvg": 8,
"scorePonderation": 10
}谢谢
发布于 2019-01-22 23:29:02
创建对象数组的一种更简单的方法可能是使用.filter()删除那些没有avg_score()的对象,然后使用.map()从每个项目中创建结果对象。
let result = subItem.implementations
.filter(i => i.avg_score)
.map(i => ({
scoreAvg: i.avg_score,
scorePonderation: i.ponderation
}));
const subItem = {
implementations: [{
avg_score: 15.7,
ponderation: 20
},
{
avg_score: 0,
ponderation: 15
}, {
avg_score: 6.8,
ponderation: 10
}
]
}
let result = subItem.implementations
.filter(i => i.avg_score) //remove items without avg_score
.map(i => ({ //turn the remaining items into objects
scoreAvg: i.avg_score,
scorePonderation: i.ponderation
}));
console.log(result);
或者,对于一次性解决方案,则为reduce()。
let result = subItem.implementations
.reduce((acc,i) =>
i.avg_score
? [...acc, {scoreAvg: i.avg_score, scorePonderation: i.ponderation}]
: acc
,[]);
const subItem = {
implementations: [{
avg_score: 15.7,
ponderation: 20
},
{
avg_score: 0,
ponderation: 15
}, {
avg_score: 6.8,
ponderation: 10
}
]
}
let result = subItem.implementations
.reduce((acc,i) =>
i.avg_score //if avg_score, add an object. else, do nothing.
? [...acc, {scoreAvg: i.avg_score, scorePonderation: i.ponderation}]
: acc
,[]);
console.log(result);
请注意,reduce()解决方案在性能上弥补了可读性方面的不足。
发布于 2019-01-22 23:27:09
Object.assign用于浅层合并对象,而不是创建您想要的对象数组。
尝试:
subItem.allAvgObj = [];
for(var i = 0; i < subItem.implementations.length; i++) {
if (subItem.implementations[i].avg_score) {
subItem.allAvgObj.push({
scoreAvg: subItem.implementations[i].avg_score,
scorePonderation: subItem.implementations[i].ponderation,
})
}
}预期输出应为:
[
{
"scoreAvg": 13.5,
"scorePonderation": 20
},
{
"scoreAvg": 16,
"scorePonderation": 20
},
{
"scoreAvg": 8,
"scorePonderation": 10
}
]https://stackoverflow.com/questions/54311387
复制相似问题