I have 2 arrays of objects
JavaScript
x
51
51
1
array1 = [
2
{
3
"name": "B",
4
"order": 1
5
},
6
{
7
"name": "C",
8
"order": 2
9
},
10
{
11
"name": "D",
12
"order": 3
13
},
14
{
15
"name": "B",
16
"order": 4
17
},
18
{
19
"name": "A",
20
"order": 5
21
}
22
]
23
24
array2 = [
25
{
26
"name": "B",
27
"order": 1,
28
"id": 3638
29
},
30
{
31
"name": "B",
32
"order": 1,
33
"id": 3661
34
},
35
{
36
"name": "C",
37
"order": 2,
38
"id": 3658
39
},
40
{
41
"name": "D",
42
"order": 3,
43
"id": 3659
44
},
45
{
46
"name": "A",
47
"order": 5,
48
"id": 3636
49
}
50
]
51
I need to sort array2 to match the same order of array1 based on the property name. In array2 there are 2 names properties equal with value B. These name B are together but i need the array to be in the exact order of array1. In array1 the first B is at index 0 and the second B is at index 3.
I made this attempts without luck.
JavaScript
1
6
1
array2.sort((a, b) => array1.indexOf(a.name) - array1.indexOf(b.name));
2
3
let sorted = array2.sort((a, b) => {
4
return array1.findIndex(p => p.name=== a.name) - array1.findIndex(p => p.name=== b.name);
5
});
6
Advertisement
Answer
You can try this, it finds the first elem in array2
matching the name, in order, from the array1
.. removes it from array2
and then adds it to the sortedArray2
.
JavaScript
1
62
62
1
const array1 = [
2
{
3
"name": "B",
4
"order": 1
5
},
6
{
7
"name": "C",
8
"order": 2
9
},
10
{
11
"name": "D",
12
"order": 3
13
},
14
{
15
"name": "B",
16
"order": 4
17
},
18
{
19
"name": "A",
20
"order": 5
21
}
22
]
23
24
const array2 = [
25
{
26
"name": "B",
27
"order": 1,
28
"id": 3638
29
},
30
{
31
"name": "B",
32
"order": 1,
33
"id": 3661
34
},
35
{
36
"name": "C",
37
"order": 2,
38
"id": 3658
39
},
40
{
41
"name": "D",
42
"order": 3,
43
"id": 3659
44
},
45
{
46
"name": "A",
47
"order": 5,
48
"id": 3636
49
}
50
]
51
52
const sortedArray2 = []
53
54
for(const item of array1) {
55
sortedArray2.push(
56
array2.splice(
57
array2.findIndex(elem => elem.name === item.name), 1
58
)
59
)
60
}
61
62
console.log(sortedArray2)