如何根据属性将数组中的一个对象替换为另一个对象?

问题描述 投票:0回答:1

我想根据 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}
]

最有效的方法是什么?

javascript arrays javascript-objects
1个回答
0
投票

使用

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。如果没有,您可以将新项目推入数组中。

© www.soinside.com 2019 - 2024. All rights reserved.