javascript - 将对象数组与相似数据合并的有效方法

标签 javascript arrays object ecmascript-6

我有两个数组,它们具有非常大但数量未知的对象。例如:

const x = [
  {
    id:'apples',
    oldData: {
      min: 9,
      max: 50
    }
  },
  ...
]

const y = [
  {
    id:'bananas',
    newData: {
      min: 2,
      max: 60
    }
  },

  {
    id:'apples',
    newData: {
      min: 50,
      max: 200
    }
  },
  ...
]

我需要结合这些,所以我的结果是这样的:

const x = [
  {
    id:'apples',
    oldData: {
      min: 9,
      max: 50
    },
    newData: {
      min: 50,
      max: 200
    }
  },
  {
    id:'bananas',
    newData: {
      min: 2,
      max: 60
    }
  }
  ...
]

请注意,apples 被合并以包含来自两个数组的数据,bananas 被添加为一个新元素,因为它没有匹配项。每个数组可能有数百个值,所以我发现执行 .map()Object.keys().map() 非常昂贵。

使用 ES6 并导入 Lodash。

最佳答案

你可以试试看

const x = [{id:'apples',oldData: {min: 9,max: 50}}];
const y = [{id:'bananas',newData: {min: 2,max: 60}},{id:'apples',newData: {min: 50,max: 200}}];

// Create an object with id as key and object as value
let obj = x.reduce((a,c) => Object.assign(a, {[c.id]:c}), {});
// Updating the value of object and adding new entries
y.forEach(v => {
  if(obj[v.id]) obj[v.id].newData = v.newData;
  else obj[v.id] = v;
});
// Getting the values in the object
console.log(Object.values(obj));

关于javascript - 将对象数组与相似数据合并的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52336497/

相关文章:

GIT Packfile 声称有更多对象,无法访问

javascript - 使用 p :commandButton 意外刷新整个页面

javascript - 检测 DOM 元素中的属性变化

javascript - 如何在 JavaScript 中向空数组添加数据使其成为多维数组?

c++ - 尝试使用 int[] 作为类型名模板,编译器无法识别函数 min 原型(prototype)中的参数

python - 在 Python 中针对一个项目存储属性列表的更好方法是什么?

javascript - Javascript 对象中的深度合并

javascript - 如何从 angularJS 模板调用 encodeURIComponent?

javascript - 如何通过 jQuery 滑动切换下拉菜单项?

C - 指向动态结构数组的指针