提问者:小点点

在javascript中合并和分组对象属性


我有一个对象数组:

var test = [{name: 'lorem', age: 20, color:'red'}, {name: 'lorem', weight: 1, height:5} , {name: 'hello', ipsum : 'dolor'}]

我想把它们合并成一组。 预期结果为:

var test = [{name: 'lorem', age : 20, color: 'red', weight : 1, height : 5}, {name: 'hello', ipsum : 'dolor'}]

解决方案可以是vanilla,lodash或JQuery.。。


共2个答案

匿名用户

您可以使用reduce并获取object.values。 下面是一个工作示例:

null

var test = [{name: 'lorem', age: 20, color:'red'}, {name: 'lorem', weight: 1, height:5} , {name: 'hello', ipsum : 'dolor'}];

var result = Object.values(test.reduce((acc, {name, ...rest})=>{
    acc[name] = {...(acc[name] || {}), ...{name, ...rest}};
    return acc;
},{}));

console.log(result);

匿名用户

您可以使用下面的方法

null

var test = [
  { name: 'lorem', age: 20, color: 'red' },
  { name: 'lorem', weight: 1, height: 5 },
  { name: 'hello', ipsum: 'dolor' },
]

const finalResult = test.reduce((result, obj) => {
  if (result[obj.name]) {
    result[obj.name] = {
      ...result[obj.name],
      ...obj,
    }
  } else {
    result[obj.name] = { ...obj }
  }
  return result
}, {})

console.log(Object.values(finalResult))