js数组合并问题。

我想(优雅的)合并两个数组

let a = [{
    id: '1',
    name: 'test1',
    count: 2
},{
    id: '2',
    name: 'test2',
    count: 3
}]

let b = [{
    id: '1',
    name: 'test1',
    count: 1
},{
    id: '3',
    name: 'test3',
    count: 3
}]

// 结果为
[{
    id: '1',
    name: 'test1',
    count: 1
},{
    id: '2',
    name: 'test2',
    count: 3
},{
    id: '3',
    name: 'test3',
    count: 3
}]

根据id,b覆盖a不同的属性

阅读 2.3k
3 个回答
Array.from(new Map([...a, ...b].map(x => [x.id, x])).values())
a.forEach(item=>{
    if(!b.some(t=>t.id===item.id)){
        b.push(item);
    }
});
console.log(b);

这种特殊需求没有原生支持还要“优雅”是不存在的,自己封装好函数就足够优雅了。

function update(dst, src) {
    for(let key in src) dst[key] = src[key];
}

// Create index
let index = {};
a.forEach((v, k) => index[v.id] = k);

b.forEach(v => {
  if(v.id in index) update(a[index[v.id]], v);
  else a.push(v);
});

另外,讲道理是“优雅地”#(滑稽)。

推荐问题
宣传栏