0

let userData = {
  myData: [{
      id: 1,
      name: 'Russell',
      country: 'Windes'
    },
    {
      id: 2,
      name: 'Smith',
      country: 'USA'
    }
  ],
  ownerData: [{
      id: 3,
      name: 'Watson',
      country: 'Australia'
    },
    {
      id: 4,
      name: 'Marcus',
      country: 'England'
    }
  ]
};

let records = arrayMapped(userData)
  .then(res => console.log(res));


async function arrayMapped(user) {
  let best4 = [];

  user.myData.forEach(async(res, i) => {

    res.myTeam = [];

    user.ownerData.forEach(async(myTeam, j) => {
      res.myTeam = myTeam;
    });

    best4.push(res);

  });

  return best4;
}

array pushing behaving weired

I was expecting myTeam id 3 should be under 1 id and myTeam 4 id would be under id 2.

but currently it is taking 4 id to all what is the reason please guide

Thanks

Barmar
  • 741,623
  • 53
  • 500
  • 612
John
  • 3
  • 2
  • 1
    You're overwriting the same `res.myTeam` each time through the inner `for` loop. So every `res` will get the last `ownerData`. – Barmar Mar 28 '22 at 15:04

1 Answers1

0

It seems like you want to iterate over the two arrays in parallel, so you shouldn't use nested loops. Just use the index of the myData loop as the index into the ownerData array.

let userData = {
  myData: [{
      id: 1,
      name: 'Russell',
      country: 'Windes'
    },
    {
      id: 2,
      name: 'Smith',
      country: 'USA'
    }
  ],
  ownerData: [{
      id: 3,
      name: 'Watson',
      country: 'Australia'
    },
    {
      id: 4,
      name: 'Marcus',
      country: 'England'
    }
  ]
};

let records = arrayMapped(userData)
  .then(res => console.log(res));

async function arrayMapped(user) {
  let best4 = [];

  user.myData.forEach(async(res, i) => {
    res.myTeam = user.ownerData[i];
    best4.push(res);
  });

  return best4;
}

I notice that you have the functions declared async, but they don't do anything asynchronously. If the real functions do, see Using async/await with a forEach loop

Barmar
  • 741,623
  • 53
  • 500
  • 612