I have the array of objects: the cars with the data. And I have a given sorted array of objects – these cars sorted by colors (red, black, other) and nested inside. Here you can take a look: JSFiddle – Two Arrays, unsorted and sorted
Which array method is better to use to create something like that? And I wouldn’t like to mutate the given array.
JavaScript
x
33
33
1
const unsortedCars = [
2
{
3
id: 3,
4
seller: 'Anna',
5
dataPublished: 'date',
6
carData: {
7
id: 3,
8
color: 'red',
9
is_sport: false,
10
},
11
},
12
{ },
13
];
14
15
const sortedCarsByColors = [
16
{
17
color: 'red',
18
cars: [
19
{
20
id: 3,
21
seller: 'Anna',
22
dataPublished: 'date',
23
carData: {
24
id: 3,
25
color: 'red',
26
is_sport: false,
27
},
28
},
29
{ },
30
],
31
},
32
];
33
Advertisement
Answer
“group by array of objects using reduce”
JavaScript
1
56
56
1
const unsortedCars = [{
2
id: 3,
3
seller: 'Anna',
4
dataPublished: 'date',
5
carData: {
6
id: 3,
7
color: 'red',
8
is_sport: false,
9
},
10
},
11
{
12
id: 2,
13
seller: 'Mark',
14
dataPublished: 'date',
15
carData: {
16
id: 2,
17
color: 'black',
18
is_sport: false,
19
},
20
},
21
{
22
id: 3,
23
seller: 'Anna',
24
dataPublished: 'date',
25
carData: {
26
id: 3,
27
color: 'red',
28
is_sport: false,
29
},
30
},
31
{
32
id: 4,
33
seller: 'Richard',
34
dataPublished: 'date',
35
carData: {
36
id: 4,
37
color: 'blue', // nor red or black
38
is_sport: false,
39
},
40
},
41
];
42
43
var obj = unsortedCars.reduce(function(agg, item) {
44
var color = item.carData.color;
45
if (color != "red" && color != "black") {
46
color = "other";
47
}
48
agg[color] = agg[color] || {
49
color: color,
50
cars: []
51
}
52
agg[color].cars.push(item)
53
return agg;
54
}, {});
55
56
console.log(Object.values(obj))