JS 数组取交集

现有如下2个数组

var a = [{convertFld: "a"},{convertFld: "b"},{convertFld: "c"},{convertFld: "g"}]
var b = [{a:1,b:2,c:3,d:4,e:5}]

我想要得到

var c = [{a:1,b:2,c:3}]

用ES6的 Set 数据结构要怎么实现呢?

阅读 2.8k
3 个回答
var a = [{id:'a'},{id:'b'},{id:'c'},{id:'f'}]
var b = [{a:1,b:2,c:3,d:4,e:5},{a:11,b:22,c:33,d:44,e:55}]
var c = b.map((item) =>{
    return a.reduce((k,m) => {
//        console.log(`k`,k,`m`,m,item.hasOwnProperty(m.id))
       item.hasOwnProperty(m.id) ? k[m.id] = item[m.id]: k
//        console.log(`k1`,k)
      return k
   },{})
})

说的有的不太清楚

  1. b为啥是数组
  2. Set啥关系啊,为啥要用Set
var a = [{convertFld: "a"},{convertFld: "b"},{convertFld: "c"},{convertFld: "g"}]
var b = [{a:1,b:2,c:3,d:4,e:5}]
// 这个
Object.values(a).filter(a=>Object.keys(b[0]).includes(a.convertFld)).map(a=>({[a.convertFld]:b[0][a.convertFld]})).reduce((a1,a2)=>({...a1,...a2}))
{a: 1, b: 2, c: 3}```

clipboard.png

其实一个map就能处理了,没理解你想用Set起到什么作用?

var a = [{convertFld: 'a'}, {convertFld: 'b'}, {convertFld: 'c'}];
var b = [{a: 1, b: 2, c: 3, d: 4, e: 5}];
var c = b.map(d => a.reduce((o, k) => (!(o[k.convertFld] = d[k.convertFld]) || o), {}));
console.log(c)
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题