js数组对象的覆盖

var o1 = [{value: "doomfist",checked: false},
{value: "genji",checked: false},
{value: "mccree", checked: false}];

var o2 = [{value: "mccree", checked: true},{value: "genji",checked: true}];

有没有现成的方法比如es6,lodash中的方法,将o2对象覆盖到o1,最终的结果是

[{value: "doomfist",checked: false},
{value: "genji",checked: true},
{value: "mccree", checked: true}]

使用Object.assign(o1,o2)的结果如下:

[{value: "mccree", checked: true}
{value: "genji", checked: true}
{value: "mccree", checked: false}]

没有一步到位的,就用这了

const result = o1.map(item1 => {
  return Object.assign(item1, o2.find(item2 => {
    return item2 && item1.value === item2.value
  }))
})
阅读 7.5k
3 个回答
Object.assign(o1,o2)

你想要{value:a,check:b}比较,让value的值不同的,不变,只更新check的值,是这个意思吗。

你的a,b本质上都是value,而现成的方法都是比较对象中的key来做替换。

sugarjs先add两个数组,然后filter掉value是mccree并且checked是false的,一步到位的还真没想起来

没有一步到位的,就用这了

const result = o1.map(item1 => {
  return Object.assign(item1, o2.find(item2 => {
    return item2 && item1.value === item2.value
  }))
})
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题