javascript - 将对象数组与相似数据合并的有效方法
问题描述
我有两个具有非常大但未知数量的对象的数组。例如:
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));
推荐阅读
- php - Laravel 请求具有复杂 url 的通配符
- python - Django Money - 添加两个不同货币的 MoneyField 并以给定货币生成输出
- android - 为什么 Google Play 控制台的 Active Installs 一天内减少到 0?
- php - 使用php循环无法将数据库中的日期与当前日期匹配
- php - Laravel 路由问题。不工作 - 未定义错误
- sublimetext3 - Sublime thTheme 范围:回声中的变量
- vba - 用于批量延迟的涓流发送的 Outlook 宏?这可能吗?
- jekyll - "jekyll build --lsi" 使博客变得非常缓慢
- python - 有没有办法专门将 DNS 端口 53 绑定到 TCP 或 UDP?
- python - python中具有多输入多输出的并行函数调用