取多个数组的交集
方法一
// 1、设置一个变量minArr,表示所有数据里最小长度的数组
// 后面通过这个最小长度数组的数据和其他的数据比较取交集的数据
function qjj(arr) {
let minArr = [],
defaultArr = [];
arr.forEach(i => {
minArr = i;
if (i.length < minArr.length) {
minArr = i;
}
});
minArr.forEach(i => {
state = [];
// 2、这里因为要知道arr每个数组里是否包含的minArr当前循环的值i,
// 所有设置了一个状态的数组state=[],
// arr里的数组j如果包含i就往state里面push一个true,否则push一个false
arr.forEach(j => {
if (j.includes(i)) {
state.push(true);
} else state.push(false);
});
// 3、最后一步通过对state状态数组对比每一个值是不是都是true
// 来判断是否把这个i存进defaultArr交集的数组里
const status = state.every(i => {
return i === true;
});
// 只有arr所有的数组都包含这个值才存进defaultArr里
status && !defaultArr.includes(i) && defaultArr.push(i);
});
return defaultArr
}
例子(调用上面函数)
let arr = [
[1,2,3,4],[3,4,6],[4,5]
]
qjj(arr) //[4]
方法二
let arr2 = [
[1, 2, 3, 4],
[3, 4, 6],
[4, 5],
[4, 5, 8, 9],
[4, 5, 2, 7],
[4, 5, 3],
[4, 5, 0],
];
arr.reduce((a, b) => a.filter(c => b.includes(c))) // [4]