javascript - 合并数组中的对象并保留相同属性的最高值

标签 javascript arrays object multidimensional-array

我有这个数组,我想合并其中的对象。

[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/

相关文章:

javascript - 将所有子节点复制到其他元素的 native 方法

javascript - 我应该在 React.js 函数组件中哪里进行 AJAX 和 API 调用?

javascript - 无法从日期对象javascript获取日期和月份

javascript - 处理放置在对象内的数组串联的更好方法

javascript - 将 Javascript 成员变量转换为 Typescript 成员变量

javascript - 具有透明背景的 CSS 馅饼微调器/加载器

javascript - 使用 Jquery : Comparing Two Arrays for ANY Match

ios - 类型 '_' 的值没有成员

javascript - 对嵌套 JSON 对象的扁平 MySQL 查询

javascript 在对象方法中传递 this