我有这个数组,我想合并其中的对象。
[null, null, {"1":1},{"2":1},{"3":1},{"2":2},{"5":1}]
我考虑过使用这样的东西:
var o1 = { a: 1, b: 1, c: 1 };
var o2 = { b: 2, c: 2 };
var o3 = { c: 3 };
var obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
但是,这些属性会被参数顺序中稍后具有相同属性的其他对象覆盖
我想要的是保持同一属性的最高值(value)。
在我的示例中,我有 {"2":1}
和 {"2":2}
,我想保留 {"2":2}
因为 2
是 "2"
属性可用的最高值。
我想最终得到这个对象:{"1":1,"2":2,"3":1,"5":1}
。
最佳答案
使用Array#reduce
将数组转换为对象,并使用Array#forEach
迭代数组中每个对象的键。
注意:我已更新您的测试用例,使其在较低值之前具有较高的值,以更好地演示解决方案。
const arr = [null, null, {"1":0},{"2":3},{"5": 25},{"3":1},{"2":2},{"5":1},{"1":-5}];
const result = arr.reduce((r, o) => {
if(!typeof(o) === 'object' || o === null) {
return r;
}
Object.keys(o) // iterate the keys
.forEach((key) => r[key] = r[key] !== undefined ? Math.max(r[key], o[key]) : o[key]); // get the greatest value
return r;
}, {});
console.log(result);
关于javascript - 合并数组中的对象并保留相同属性的最高值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44982659/