鍍金池/ 問答/HTML/ es6中,如何求數(shù)組對象的交集,差集?

es6中,如何求數(shù)組對象的交集,差集?

 有以下數(shù)據(jù):
 let a = new Set([
    {
        'categoryId': 1,
        'categoryIdLevelOne': 750611334,
        'categoryIdLevelThree': 750611336,
        'categoryIdLevelTwo': 750611335,
        'id': 2697,
        'level': 3,
        'shopId': 12430,
        'skipLayoutFlag': false,
        'status': 1
    },
    {
        'categoryId': 2,
        'categoryIdLevelOne': 750611472,
        'categoryIdLevelTwo': 750611473,
        'id': 2701,
        'level': 2,
        'shopId': 12430,
        'skipLayoutFlag': false,
        'status': 2
    },
    {
        'categoryId': 3,
        'categoryIdLevelOne': 750611487,
        'categoryIdLevelTwo': 750611488,
        'id': 2702,
        'level': 2,
        'shopId': 12430,
        'skipLayoutFlag': false,
        'status': 1
    }
])
let b = new Set([
    {
        'categoryId': 2,
        'categoryIdLevelOne': 750611334,
        'categoryIdLevelThree': 750611336,
        'categoryIdLevelTwo': 750611335,
        'id': 2697,
        'level': 3,
        'shopId': 12430,
        'skipLayoutFlag': false,
        'status': 1
    },
    {
        'categoryId': 3,
        'categoryIdLevelOne': 750611472,
        'categoryIdLevelTwo': 750611473,
        'id': 2701,
        'level': 2,
        'shopId': 12430,
        'skipLayoutFlag': false,
        'status': 2
    },
    {
        'categoryId': 4,
        'categoryIdLevelOne': 750611487,
        'categoryIdLevelTwo': 750611488,
        'id': 2702,
        'level': 2,
        'shopId': 12430,
        'skipLayoutFlag': false,
        'status': 1
    }
])



  以上數(shù)據(jù)中,如何根據(jù)categoryId求交集:
  let union = [...new Set([...a, ...b])] 
        
  let intersect = [...new Set([...a].filter(x => b.has(x)))]
    
  intersect結(jié)果為[]!
  如果數(shù)據(jù)是:
  let a=new Set([1,2,3]);
  let b=new Set([4,3,2]);  
  結(jié)果是我想要的。
回答
編輯回答
不二心

交集:

[...a].filter(x => [...b].some(y => y.categoryId === x.categoryId))

//或者

Array.from(a).filter(x => Array.from(b).some(y => y.categoryId === x.categoryId))

差集:

[...a].filter(x => [...b].every(y => y.categoryId !== x.categoryId))
2017年10月31日 23:02