Push operation is replacing array instead of adding to it

Anyone know why the array item at position 1 (index 0) is being replaced?

  splitPetsByOwner(relationshipsArray) {
    let ownersObj = {};
    
    relationshipsArray.forEach(obj => {
      console.log(ownersObj, `=====ownersObj start=====`);
      console.log(obj.owner, `=====obj.owner=====`);
      const ownerKey = obj.owner;
      
      if (typeof obj[ownerKey] === "undefined") {
        ownersObj[ownerKey] = [];
      }
  
      ownersObj[ownerKey].push(obj.pet);
      console.log(ownersObj, `=====ownersObj inside=====`);
    });
  
    console.log(ownersObj, `=====ownersObj outside=====`);
  }
// { nan: [ '3' ], bo: [ '7' ] }
sh.splitPetsByOwner([
  {owner: "nan", pet: '1'}, {owner: "nan", pet: '2'}, {owner: "nan", pet: '3'}, {owner: "bo", pet: '4'}, {owner: "bo", pet: '5'}, {owner: "bo", pet: '6'}, {owner: "bo", pet: '7'}
  ]);

if (typeof obj[ownerKey] === "undefined") {
        ownersObj[ownerKey] = [];
      }

Since obj is the member of relationshipsArray it will never have a member matching ownerKey. That means that ownersObj[ownerKey] will always be overwritten as an empty array.

It’s not push that is your problem. It’s this logic.

1 Like