具有以下对象数组:
const input = [ {id: 3, data: {name: 'john'} },
{id: 6, data: {name: 'mike'} },
{id: 2, data: {name: 'anna'} }
];
我想写一个接收新对象的方法,如果对象的id在数组中,它会用新对象替换那个对象,否则它会创建一个新对象。
例如,如果该方法接收到这个对象:{id: 1, data: {name: 'maria' }}
,它将把它添加到数组中,所以数组看起来像:
const input = [ {id: 3, data: {name: 'john'} },
{id: 6, data: {name: 'mike'} },
{id: 2, data: {name: 'anna'} },
{id: 2, data: {name: 'maria'} }
];
如果它接收到{id: 3, data: {name: 'jack' }}
,它应该用id=3替换对象,因此结果将是:
const input = [ {id: 3, data: {name: 'jack'} },
{id: 6, data: {name: 'mike'} },
{id: 2, data: {name: 'anna'} },
{id: 2, data: {name: 'maria'} }
];
代码:
function doMagic(input, newObj) {
if (input.some(el => el.id === newObj.id) {
// replace it
} else {
// add the object to the array
}
}
您可以这样做:
function doMagic(input, newObj) {
const i = input.findIndex(element => element.id === newObj.id);
if (i > -1) input[i] = newObj;
else input.push(newObj);
}
const input = [ {id: 3, data: {name: 'jack'} },
{id: 6, data: {name: 'mike'} },
{id: 2, data: {name: 'anna'} }
];
newObj = {id: 1, data: {name: 'maria' }};
oldObj = {id: 3, data: {name: 'john' }}
doMagic(input, newObj);
console.log(input);
doMagic(input, oldObj);
console.log(input);
function doMagic(input, newObj) {
input.map((el, i, arr) => {
if (input.some(el => el.id === newObj.id)) {
input.splice(i, 1, newObj);
} else {
input.push(newObj);
}
})
}
可以使用find((来检查它是否包含所需的对象。若数组包含对象,那个么我们可以通过object.assign((方法更新它。如果没有,那么我们只将此项推送到数组中。
const oneFunction = (arr, objToEdit) => {
let existingObject = arr.find(f => f.id === objToEdit.id
&& f.data.name !== objToEdit.name);
if (existingObject)
Object.assign(existingObject, objToEdit);
else
arr.push(objToEdit)
return arr;
}
一个例子:
const input =
[
{id: 3, data: {name: 'john'} },
{id: 6, data: {name: 'mike'} },
{id: 2, data: {name: 'anna'} }
];
const oneFunction = (arr, objToEdit) => {
let existingObject = arr.find(f => f.id === objToEdit.id && f.data.name !== objToEdit.name);
if (existingObject)
Object.assign(existingObject, objToEdit);
else
arr.push(objToEdit)
return arr;
}
let testObject = {id: 3, data: {name: 'john1'}};
console.log(oneFunction(input, testObject))