我有一个看起来像这样的对象数组:
var data = [
{Date: "01-01-2000", Banana: 10},
{Date: "01-01-2000", Apple: 15},
{Date: "01-01-2000", Orange: 20},
{Date: "01-02-2000", Banana: 25},
{Date: "01-02-2000", Apple: 30},
{Date: "01-02-2000", Orange: 35}];
我想知道如何以相同的日期值合并此数组中的对象,以便返回以下数组:
data = [
{Date: "01-01-2000", Banana: 10, Apple: 15, Orange: 20},
{Date: "01-02-2000", Banana: 25, Apple: 30, Orange: 35}];
抱歉,如果这是一个重复的问题,我只是无法找到每个对象中键和值对都不相同的示例,所以我想至少可以问一下。
答案 0 :(得分:1)
一种替代方法是使用函数reduce
对对象进行分组,并使用函数Object.values
提取分组的对象。
var data = [{Date: "01-01-2000", Banana: 10},{Date: "01-01-2000", Apple: 15},{Date: "01-01-2000", Orange: 20},{Date: "01-02-2000", Banana: 25},{Date: "01-02-2000", Apple: 30},{Date: "01-02-2000", Orange: 35}],
result = Object.values(data.reduce((a, c) => {
a[c.Date] = Object.assign(a[c.Date] || {}, c);
return a;
}, {}));
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
或者,您可以使用for循环。
尝试:
var data = [{Date: "01-01-2000", Banana: 10},{Date: "01-01-2000", Apple: 15},{Date: "01-01-2000", Orange: 20},{Date: "01-02-2000", Banana: 25},{Date: "01-02-2000", Apple: 30},{Date: "01-02-2000", Orange: 35}];
var obj = {};
for(var i = 0; i < data.length; i++){
var date = data[i].Date;
// Get previous date saved inside the result
var p_date = obj[date] || {};
// Merge the previous date with the next date
obj[date] = Object.assign(p_date, data[i]);
}
// Convert to an array
var result = Object.values(obj);
console.log(result);