我有一个像这样的对象数组:
const obj1 = [{
id: null,
val: 1
},{
id: 123,
val: 1
},{
id: 456,
val: 2
},{
id: null,
val: 3
}];
我需要检查属性'val'何时不会加倍,并且如果其中一个是double,则应该保持具有'id'的对象不为null。为了更好地解释我,数组的结果应该是:
[{
id: 123,
val: 1
},{
id: 456,
val: 2
},{
id: null,
val: 3
}];
感谢您帮助我。
答案 0 :(得分:1)
可能有一个更短的方式,但你绝对可以使用reduce
:
const obj1 = [{
id: null,
val: 1
},{
id: 123,
val: 1
},{
id: 456,
val: 2
},{
id: null,
val: 3
}];
const result = obj1.reduce((res, item) => {
// Find index of item with same "val" if any.
const index = res.findIndex(x => x.val === item.val)
if (res[index]) {
// If there was item with same "val", but null ID, replace it, otherwise do nothing:
if (res[index].id === null) res[index] = item;
} else {
// Otherwise just add to array.
res.push(item);
}
return res;
}, []);
console.log(result)
答案 1 :(得分:0)
您可以使用Map
并检查该值是否在地图中,或者id
是否为空,然后使用实际对象设置地图。
var array = [{ id: null, val: 1 }, { id: 123, val: 1 }, { id: 456, val: 2 }, { id: null, val: 3 }],
map = new Map(),
result;
array.forEach(o => (!map.has(o.val) || map.get(o.val).id === null) && map.set(o.val, o));
result = [...map.values()];
console.log(result);

.as-console-wrapper { max-height: 100% !important; top: 0; }