可以使用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
属性和newObj
的prop2
属性是否不同。如果两个属性中有一个不同,就保留该对象,否则就过滤掉。最后将过滤后的结果和新对象newObj
组合成一个新数组返回。