I want to Add/Replace the object
from array of objects
by testing some properties
against array object
Replace
object if name and id matches
Add
object
to thearray if name and id does not match from array objects
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)
I want to Add/Replace the object
from array of objects
by testing some properties
against array object
Replace
object if name and id matches
Add
object
to thearray if name and id does not match from array objects
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)
Share
Improve this question
asked Feb 12, 2018 at 9:46
Dipak TelangreDipak Telangre
1,9934 gold badges23 silver badges49 bronze badges
4
|
3 Answers
Reset to default 17You 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);
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;
}
}
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)
wrap
it in afunction
? – gurvinder372 Commented Feb 12, 2018 at 9:59