js两个数组对象根据属性相同的值合并

想法是根据uid的值,合并其他属性。

const a=[{
    uid: 1,
    name: 'apple'
},{
    uid: 2,
    name: 'banana'
}]

const b=[{
    uid: 1,
    unit: 'pcs'
},{
    uid: 2,
    unit: 'kg'
}]
// 期待的效果

c=[{
    uid: 1,
    name: 'apple',
    unit: 'pcs',
},{
    uid: 2,
    name: 'banana',
    unit: 'kg',
}]
阅读 12k
3 个回答
const a=[{
    uid: 1,
    name: 'apple'
},{
    uid: 2,
    name: 'banana'
}]

const b=[{
    uid: 1,
    unit: 'pcs'
},{
    uid: 2,
    unit: 'kg'
}]
// 期待的效果


a.map(el => {
    el.unit = b.find(item => item.uid == el.uid).unit
})


console.log(a)
const a=[{
    uid: 1,
    name: 'apple'
},{
    uid: 2,
    name: 'banana'
}]

const b=[{
    uid: 1,
    unit: 'pcs'
},{
    uid: 2,
    unit: 'kg'
}]
// 期待的效果


a.map(el => {
    el.unit = b.find(item => item.uid == el.uid).unit
})


console.log(a)
[
  { uid: 1, name: 'apple', unit: 'pcs' },
  { uid: 2, name: 'banana', unit: 'kg' }
]

let mapA = a.reduce((r, i) => (r[i.id] = i, r), {})
let result = Object.values(mapA)
b.forEach(i => {
  mapA[i.id] ? Object.assign(mapA[i.id], i) : result.push(i)
})

console.log(result)
const c = [];
a.forEach(item =>
  b.forEach(value => item.uid === value.uid && c.push({ ...item, ...value }))
);

console.log(c);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题