我正在尝试构建一个对象数组,但将相似的属性组合在一起,并将它们的值相加。那么多的x
数组需要转化为对象的y
数组。它必须是一个对象数组,而不仅仅是一个数组
var x = [
{"2018-09-13": "100"},
{"2018-09-14": "50"},
{"2018-09-14": "50"},
{"2018-09-15": "100"}
];
期望的结果
var y = [
{"2018-09-13": "100"},
{"2018-09-14": "50,50"},
{"2018-09-15": "100"}
];
下面是我正在运行的将它们加在一起的函数,但不起作用。我认为这与导致hasOwnProperty
方法问题的数组索引有关
var z = [];
x.forEach((item) => {
for(var date in item) {
if(z.hasOwnProperty(date)) {
z[date] += "," + item[date];
} else {
z.push({[date]: item[date]});
}
}
})
console.log(z)
发布于 2018-09-14 07:51:21
你可以通过减少数组来分组,只有在没有找到键的情况下,才能将值推入累加器,如果找到,只需更新值……
var array = [{
"2018-09-13": "100"
},
{
"2018-09-14": "50"
},
{
"2018-09-14": "50"
},
{
"2018-09-15": "100"
}
];
var grouped = array.reduce((acc, obj) => {
var old = null;
let key = Object.keys(obj)[0]
old = acc.find(item => key == Object.keys(item)[0]);
if (!old) {
acc.push(obj);
} else {
old[key] += `, ${obj[key]}`;
}
return acc;
}, []);
console.log(grouped);
https://stackoverflow.com/questions/52322967
复制相似问题