几个数组合并然后根据数组对象中的数组去重

假设有2个数组,结构大致是这样的

[   
    {
        code:'A',
        list:[{
            name:'A'
        },{
            name:'B'
        },{
            name:'C'
        }]
     },
     {
        code:'D',
        list:[{
            name:'A'
        },{
            name:'B'
        },{
            name:'C'
        }]
     }
];

[
    {
        code:'A',
        list:[{
            name:'A'
        },{
            name:'B'
        },{
            name:'C'
        },{
            name:'D'
        }]
     },
     {
        code:'B',
        list:[{
            name:'A'
        },{
            name:'B'
        }]
     }
];

然后先判断2个数组中的code是否相等,如果相等在遍历里面的list在判断name是否相等,有什么优雅的解决方案,目前嵌套了好几层,实现是可以实现,但是感觉不优雅,想求个优雅的方案洗洗脑。

阅读 2.7k
2 个回答
let a  = [{
        name:'A'
    },{
        name:'B'
    },{
        name:'C'
    }]
let b = [{
        name:'A'
    },{
        name:'B'
    },{
        name:'C'
    },{
        name:'D'
    }]
 
a.push(...b)
a.filter((v, index) => index === a.findIndex(y => y.name === v.name))

试试这样?

外层应该是对象吧,你这怎么是数组

function merge(data1, data2) {
  if (data1.code !== data2.code) return null
  let result = {
    code: data1.code,
    list: [ ...data1.list ]
  }
  let inResult = {}
  result.list.forEach(item => {
    inResult[item.name] = true
  })
  data2.list.forEach(item => !inResult[item.name] && result.list.push(item))
  return result
}

let data1 = {
    code:'A',
    list:[{
        name:'A'
    },{
        name:'B'
    },{
        name:'E'
    }]
}

let data2 = {
    code:'A',
    list:[{
        name:'A'
    },{
        name:'B'
    },{
        name:'C'
    },{
        name:'D'
    }]
}

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