交集
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']
思路
- 因为是交集,所以如果第一个数组没有。那其他数组应该也没有
- 所以用第一个数组作为一次的prev
- 然后用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' ]