-1

i have this array of object (1):

0: {sequence: 0, name: "........", start_time_planned_route: "08:00:00"}
1: {sequence: 1, name: "........", start_time_planned_route: "08:32:00"}
2: {sequence: 2, name: "........", start_time_planned_route: "08:40:00"}

As we see sequence was sorting from 0 to 2

i have another array of object (2):

0: {sequence: 2, name: "........", place: "A"}
1: {sequence: 0, name: "........", place: "B"}
2: {sequence: 1, name: "........", place: "C"}

I am trying to push place from array of object (2) to array of object (1) where sequence of (2) equal sequence of (1).

output:

0: {sequence: 0, name: "........", start_time_planned_route: "08:00:00", place: "B"}
1: {sequence: 1, name: "........", start_time_planned_route: "08:32:00", place: "C"}
2: {sequence: 2, name: "........", start_time_planned_route: "08:40:00", place: "A"}

What I try is multiple for loop and multiple condition, I know that is wrong and bad code.

Does JavaScript have an easy method to do this?

Heretic Monkey
  • 11,687
  • 7
  • 53
  • 122
Mhd Jawad
  • 15
  • 5

2 Answers2

1

You can make use of map and find:

const arr=[{sequence: 0, name: "........", start_time_planned_route: "08:00:00"},
{sequence: 1, name: "........", start_time_planned_route: "08:32:00"},
{sequence: 2, name: "........", start_time_planned_route: "08:40:00"}];

const places=[ {sequence: 2, name: "........", place: "A"},
{sequence: 0, name: "........", place: "B"},
{sequence: 1, name: "........", place: "C"}];

console.log(arr.map(p=>({...p, place:places.find(o=>o.sequence==p.sequence)?.place})));
gorak
  • 5,233
  • 1
  • 7
  • 19
0

Well you can use for and conditionals to do this or you cna use array methods.
This is a simple and easy to understand solution

array1=[{sequence: 0, name: "........", start_time_planned_route: "08:00:00"},
{sequence: 1, name: "........", start_time_planned_route: "08:32:00"},
{sequence: 2, name: "........", start_time_planned_route: "08:40:00"}]

array2=[{sequence: 2, name: "........", place: "A"}, {sequence: 0, name: "........", place: "B"},{sequence: 1, name: "........", place: "C"}]

for(let i = 0; i< array2.length; i++)
    {
    for(let j=0; j<array1.length; j++)
        if (array2[j]['sequence'] == array1[i]['sequence'])
             array1[i]['place'] = array2[j]['place'] 
    }
    
console.log(array1);
console.log(array2);

And this is another one:

array1=[{sequence: 0, name: "........", start_time_planned_route: "08:00:00"},
{sequence: 1, name: "........", start_time_planned_route: "08:32:00"},
{sequence: 2, name: "........", start_time_planned_route: "08:40:00"}]

array2=[{sequence: 2, name: "........", place: "A"}, {sequence: 0, name: "........", place: "B"},{sequence: 1, name: "........", place: "C"}]

array1.forEach(function(v,i,a){a[i]['place']=( this.filter(function(v2){return (v2['sequence'] == v['sequence']) })[0]['place']) }, array2)
console.log(array1);
console.log(array2);

Last solution is more criptic. It iterates array1 and for each item it filter items of array2 whose sequence is equal to sequence of item of array1.
NOTE: I've supossed property sequence are unique in both array (key field).

Juan
  • 118
  • 4