对象数组去重问题,同一个属性,要最新的值

35 阅读1分钟

可以使用Array.prototype.filter()和Array.prototype.some()方法来实现该功能:

function updateObjectArray(arr, newObj) {
  return arr.filter(obj => {
    return !(obj.prop1 === newObj.prop1 && obj.prop2 !== newObj.prop2);
  }).concat(newObj);
}

// 示例用法
const arr = [{prop1: 'a', prop2: 'x'}, {prop1: 'b', prop2: 'y'}, {prop1: 'c', prop2: 'z'}];
const newObj = {prop1: 'a', prop2: 'new'};
const updatedArr = updateObjectArray(arr, newObj);

console.log(updatedArr); // [{prop1: 'b', prop2: 'y'}, {prop1: 'c', prop2: 'z'}, {prop1: 'a', prop2: 'new'}]

这个函数将原始数组arr中所有符合条件的对象都过滤掉,最后将新对象newObj添加到过滤后的结果中。具体来说,Array.prototype.filter()方法遍历数组arr,对于其中的每个对象,使用Array.prototype.some()方法判断其prop1属性和newObj对象的prop1属性是否相同,以及prop2属性和newObjprop2属性是否不同。如果两个属性中有一个不同,就保留该对象,否则就过滤掉。最后将过滤后的结果和新对象newObj组合成一个新数组返回。