我有一个包含这些对象的数组。我想要的是相同键的总和值。例如,
let data = [
{
name: "fieldA",
value: 20,
},
{
name: "building",
value: 20,
},
{
name: "fieldA",
value: 20,
},
{
name: "building",
value: 20,
},
];
结果应该是:
[
{
name: "fieldA",
value: 40,
},
{
name: "building",
value: 40,
}
];
该怎么做?可以使用map
函数吗?
答案 0 :(得分:2)
您可以使用reduce()
来实现:
var data = [ { name: "fieldA", value: 20, }, { name: "building", value: 20, }, { name: "fieldA", value: 20, }, { name: "building", value: 20, }];
var result = Object.values(data.reduce((acc,{name, value})=>{
acc[name] = acc[name] || {name, value:0};
acc[name].value+=value;
return acc;
},{}));
console.log(result);
答案 1 :(得分:1)
您需要reduce()
const data = [
{
name: 'fieldA',
value: 20,
},
{
name: 'building',
value: 20,
},
{
name: 'fieldA',
value: 20,
},
{
name: 'building',
value: 20,
},
];
const result = data.reduce((acc, val) => {
const findName = acc.find(_ => _.name === val.name);
if (findName) {
findName.value += val.value;
} else {
acc.push(val);
}
return acc;
}, []);
console.log(result);
答案 2 :(得分:0)
假设是故意的,那么所有对象似乎都具有相同的“值”,这是我的解决方案……不是超级优雅,但能做到
let data = [{
name: "fieldA",
value: 20,
},
{
name: "building",
value: 20,
},
{
name: "fieldA",
value: 20,
},
{
name: "building",
value: 20,
},
];
function matchValue(param, val) {
let matches = [];
for (let i = 0; i < param.length; i++) {
console.log(param[i]);
if (param[i].value === val) {
matches.push(param[i]);
}
}
return matches;
}
console.log(matchValue(data, 20));