获取数组对象的交集算法

let data = {
                nameList1: [{ category: '心累'}, { category: '我卡哦哦'}],
                nameList2: [{ category: '心不累'}],
                nameList3: [{ category: '心累'}]
           }

变量data是从后端返回的数据,里面有n个数组,我需要从n个数组里获取交集的对象. category字段的值做比较。

例子:
`
data = {

            nameList1: [{ category: '心累'}, { category: '我卡哦哦'}],
            nameList2: [{ category: '心不累'}],
            nameList3: [{ category: '心累'}]

}
交集对象无,即三个数组中,没有相同的对象
`
例2
`
data2 = {

            nameList1: [{ category: '心累'}, { category: '我卡哦哦'}],
            nameList2: [{ category: '心累'}],
            nameList3: [{ category: '心累'}]

}
即三个数组中,有相同的对象。交集对象[{ category: '心累'}];
`

阅读 2.8k
2 个回答

写了一个有点low看看适合吗

  function getIntersection(data) {
           let intersection = [];
           let keyLen = Object.keys(data).length;
           let values = Object.values(data).flat();
           values.reduce((res, cur) => {
               let findItem = res.find(v => v.category == cur.category);
               if (findItem) {
                   findItem.count += 1
               } else {
                   res.push({...cur, count:1})
               }
               return res;
           }, []).forEach(item => item.count == keyLen && intersection.push({category: item.category}))
           return intersection
   }

看不懂提问,你举个正面例子,和一个反面例子吧

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