對需求的深刻認知,決定了解決問題的技巧高度
問題
例如:var a=[[1,2,3,5], [2,3,4], [2,3], [2,3,6,7]];
輸出:[2,3]
例如:var a=[[0,1,2,3,5],[-1,1,4,5,6,7],[1,2,3,5,6]];
輸出:[1,5]
常規
一般人會考慮降維,去重,計數,過濾,如下所示
var a = [[1, 2, 3, 5], [2, 3, 4], [2, 3], [2, 3, 6, 7]];
// 1.降維
var arr1 = [].concat(...a)
console.log(arr1)
// 2.去重
var uniq = [...new Set(arr1)]
console.log(uniq)
// 3. 計數
var counter = arr1.reduce((acc, v) => {
if (v in acc) {
acc[v]++
} else {
acc[v] = 1
}
// 4.非重
// if(acc[v] > 1 && uniq.indexOf(v) > -1){
// uniq.splice(uniq.indexOf(v),1)
// }
return acc
}, {})
console.log(counter)
// 4.求重
var duplicate = uniq.filter(e => counter[e] > 1)
console.log(duplicate)
列印
[ 1, 2, 3, 5, 2, 3, 4, 2, 3, 2, 3, 6, 7 ]
[ 1, 2, 3, 5, 4, 6, 7 ]
{ '1': 1, '2': 4, '3': 4, '4': 1, '5': 1, '6': 1, '7': 1 }
[ 2, 3 ]
一行
迴歸需求本質,實質上是求二維陣列中各個元素(陣列)之間的交集,
因此可選擇任意一陣列,用其中每個元素通過斷言過濾其是否在每一子成員陣列中。
思路: 過濾 --> 迭代 --> 斷言
var dup = a[0].filter(item => a.every(arr =>arr.includes(item)))
console.log(dup) // 輸出 [ 2, 3 ]