Dipak Telangre
Dipak Telangre

Reputation: 1993

Add/Replace object from array of objects JavaScript

I want to Add/Replace the object from array of objects by testing some properties against array object

I am using below code, its working fine but I am not sure is it a good solution.

let arr = [{name: 'test1', id:1, data: {a:1} }, {name:'test2', id:2, data: {a:2}}]
let obj = {name:'test3', id:3, data: {a:3}}
let itemFound = false;
let newArr = arr.map((item)=>{
  let test = item.name === obj.name && item.id === obj.id;
  if(test){
	itemFound = true;
  }
  return test ? obj : item;
});

if(!itemFound){
	newArr.push(obj);
}
console.log(newArr)

Upvotes: 9

Views: 16810

Answers (3)

Rakibul Haq
Rakibul Haq

Reputation: 1398

Wraping @Nina Scholz 's answer in a function


objectReplacer(arrayOfObjects, newObject) {

      let index = arrayOfObjects.findIndex((value) => value === newObject.value);

      if (index === -1) {
        arrayOfObjects.push(newObject);
      } else {
        arrayOfObjects[index] = newObject;
      }
    }

Upvotes: 1

shawon191
shawon191

Reputation: 1955

You can use Array.prototype.find()

let arr = [{name: 'test1', id:1, data: {a:1} }, {name:'test2', id:2, data: {a:2}}]
let obj = {name:'test3', id:3, data: {a:3}}

const newArr = arr.slice();
const existingObj = newArr.find(item => item.name === obj.name && item.id === obj.id);

if(existingObj) {
    Object.assign(existingObj, obj);
} else {
    newArr.push(obj)
}

console.log(newArr)

Upvotes: 0

Nina Scholz
Nina Scholz

Reputation: 386634

You could look for the index and update the array, if found or push the object.

var array = [{ name: 'test1', id: 1, data: { a: 1 } }, { name: 'test2', id: 2, data: { a: 2 } }],
    object = { name: 'test3', id: 3, data: { a: 3 } },
    index = array.findIndex(({ name, id }) => name === object.name && id === object.id);

if (index === -1) {
    array.push(object);
} else {
    array[index] = object;
}

console.log(array);

Upvotes: 17

Related Questions