我想根据 JavaScript 中该对象的属性,有效地将数组中的一个对象替换为另一个对象。下面是一个例子:
const oldEmployees = [
{id: 1, name: 'Jon', age: 38},
{id: 2, name: 'Mike', age: 35},
{id: 3, name: 'Shawn', age: 40}
];
const newEmployee = {id: 2, name: 'Raj', age: 32};
我希望输出为:
[
{id: 1, name: 'Jon', age: 38},
{id: 2, name: 'Raj', age: 32},
{id: 3, name: 'Shawn', age: 40}
]
最有效的方法是什么?
使用
Array::some()
和 Object.assign()
您可以同时更新您的对象:
(我猜更新的目标是好的,因为id是相同的)
const oldEmployees = [
{id: 1, name: 'Jon', age: 38},
{id: 2, name: 'Mike', age: 35},
{id: 3, name: 'Shawn', age: 40}
];
const newEmployee = {id: 2, name: 'Raj', age: 32};
const replaceByProp = (arr, obj, prop) => arr.some(old => obj[prop] === old[prop] && Object.assign(old, obj));
replaceByProp(oldEmployees, newEmployee, 'id');
console.log(oldEmployees);
更换:
const oldEmployees = [
{id: 1, name: 'Jon', age: 38},
{id: 2, name: 'Mike', age: 35},
{id: 3, name: 'Shawn', age: 40}
];
const newEmployee = {id: 2, name: 'Raj', age: 32};
const replaceByProp = (arr, obj, prop) => arr.some((old, idx) => obj[prop] === old[prop] && arr.splice(idx, 1, obj));
replaceByProp(oldEmployees, newEmployee, 'id');
console.log(oldEmployees);
作为奖励,无论替换是否完成,返回值都是 true/false。如果没有,您可以将新项目推入数组中。