数据的交集和并集

211 阅读2分钟

交集

    const a = [
    [
        {
            "pagesSpaceId": "1368749802525904898",
            "payMode": "CPM",
            "price": 1000,
            "id": "1368749802542682114",
            "isBid": "0"
        }
    ],
    [
        {
            "pagesSpaceId": "1368751966954541058",
            "payMode": "CPT",
            "price": 100000,
            "id": "1368751966971318274",
            "isBid": "0"
        },
        {
            "pagesSpaceId": "1368751966954541058",
            "payMode": "CPM",
            "price": 100000,
            "id": "1368751966971318274",
            "isBid": "0"
        }
    ],[
        {
            "pagesSpaceId": "1368751966954541058",
            "payMode": "CPT",
            "price": 100000,
            "id": "1368751966971318274",
            "isBid": "0"
        },
        {
            "pagesSpaceId": "1368751966954541058",
            "payMode": "CPM",
            "price": 100000,
            "id": "1368751966971318274",
            "isBid": "0"
        },
        {
            "pagesSpaceId": "1368751966954541058",
            "payMode": "CPT",
            "price": 100000,
            "id": "1368751966971318274",
            "isBid": "0"
        }
    ]
]

const b = a.reduce(function (prev, cur,index) {
       if(index===0){
        return  Array.from(cur.map(el=>el.payMode)) 
       }else{
        return  Array.from(new Set([...prev].filter(x => cur.map(el=>el.payMode).includes(x)))) 
       }
},[])

console.log(b) // ['CPM']

思路

  1. 因为是交集,所以如果第一个数组没有。那其他数组应该也没有
  2. 所以用第一个数组作为一次的prev
  3. 然后用prev 去过滤掉下个数组的值,如果下个数组的值不包含再prev中。就过滤掉依此类推

并集

const par = [[{
    "pagesSpaceId": "1368749802525904898",
    "payMode": "CPM",
    "price": 75,
    "id": "1368749802542682114",
    "isBid": "0"
},
{
    "pagesSpaceId": "1368749802525904898",
    "payMode": "CPC",
    "price": 120,
    "id": "1408306624612229122",
    "isBid": "0"
}], [{
    "pagesSpaceId": "1368751966954541058",
    "payMode": "CPT",
    "price": 75,
    "id": "1368751966971318274",
    "isBid": "0"
}]]

const arr = [...new Set(payArr.flat(Infinity).map(item = >item.payMode))] console.log(arr) 
// ['cpm','cpc','cpt' ]