I have an array of objects that looks like this:
JavaScript
x
8
1
var data = [
2
{Date: "01-01-2000", Banana: 10},
3
{Date: "01-01-2000", Apple: 15},
4
{Date: "01-01-2000", Orange: 20},
5
{Date: "01-02-2000", Banana: 25},
6
{Date: "01-02-2000", Apple: 30},
7
{Date: "01-02-2000", Orange: 35}];
8
And I would like to know how to merge the objects in this array by the same date values so that the following array is returned:
JavaScript
1
4
1
data = [
2
{Date: "01-01-2000", Banana: 10, Apple: 15, Orange: 20},
3
{Date: "01-02-2000", Banana: 25, Apple: 30, Orange: 35}];
4
My apologies if this is a duplicate question, I just have not been able to find an example where the key & value pairs are different in each object and so I thought I would at least ask.
Advertisement
Answer
Alternatively, you can use a for loop.
Try:
JavaScript
1
14
14
1
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}];
2
var obj = {};
3
for(var i = 0; i < data.length; i++){
4
var date = data[i].Date;
5
// Get previous date saved inside the result
6
var p_date = obj[date] || {};
7
// Merge the previous date with the next date
8
obj[date] = Object.assign(p_date, data[i]);
9
}
10
11
// Convert to an array
12
var result = Object.values(obj);
13
14
console.log(result);