You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
function intersection(arr,...args){
// 记录每次对比两个数组的交集
let set = new Set(arr);
for(let e of args){ // 取出不定个参数数组
let rep = []; // 记录当前数组和之前交集的交集
for(let ele of e){
if(set.has(ele)){
rep.push(ele);
}
}
set = new Set(rep); // 将交集用于和下组数组的对比
}
return [...set];
}
Activity
[-]阿里算法题:求多个数组之间的交集[/-][+]阿里算法题:编写一个函数计算多个数组的交集[/+]wuchendi commentedon Apr 7, 2020
cyndra0 commentedon Apr 7, 2020
liwuhou commentedon Apr 8, 2020
万能的
reducemingju0421 commentedon Apr 8, 2020
352800205 commentedon Apr 8, 2020
一行代码搞定
BoswellJi commentedon Apr 8, 2020
ZWBruce commentedon Apr 8, 2020
AiKunnnnn commentedon Apr 8, 2020
在原先两个数组求交集的基础上使用reduce
合并之后就是
kimixue commentedon Apr 8, 2020
hh-cheng commentedon Apr 8, 2020
hecun0000 commentedon Apr 8, 2020
hhshii commentedon Apr 8, 2020
sisterAn commentedon Apr 8, 2020
使用 reducer 函数
sfsoul commentedon Apr 27, 2020
2 remaining items
guanping1210 commentedon Jun 1, 2020
需要注意的地方:
1、交集中的每一项,在每个数组中都要存在,所以用到了every
2、需要考虑去重,有可能一个数据在每个数组中多次出现
scottdao commentedon Jun 23, 2020
function merge(){
let args = Array.prototype.slice.call(arguments);
let col = 0, new_obj = {}, len = args.length, new_arr = [];
while(col<args.length){
let row = args[col].length - 1,cache_arr = [];
while(row>=0){
if(new_obj[args[col][row]]){
new_obj[args[col][row]] = ++new_obj[args[col][row]];
}else{
new_obj[args[col][row]] = 1;
}
// console.log(new_obj, args[col][row])
if(new_obj[args[col][row]]>=len){
cache_arr.push(args[col][row])
}
row--;
new_arr = cache_arr;
}
col++
}
// console.log(new_obj)
return new_arr;
}
Been101 commentedon Jul 15, 2020
1
2
qianlongo commentedon Aug 15, 2020
jwliushaoye commentedon Aug 26, 2020
DAHU123 commentedon Feb 2, 2021
`
function intersection(arr1, arr2) {
const a1 = new Set([...arr1]);
return Array.from(new Set([...arr2.filter(item => a1.has(item))]));
}
`
emmachan613 commentedon Mar 18, 2021
liuchao1618 commentedon Mar 24, 2021
// 多个数组取交集(三个及以上)
// 原数组
const serveralArr = [
[1,2,4,5,23,3,2,2,4,3,5,5],
[3,2,3,2,2,4,3,1,4,5,6],
[3,2,4,3,2,4,1,2,5],
[3,2,4,5,5,4,3,1,2,2],
[3,2,23,3,4,1,3,4,5,5,4,3,1,2,2],
[3,2,4,1,2,5,5,4,3,1,2,2],
[3,2,4,25,5,4,3,1,2,2],
]
// ES5 方法实现数学意义上的交集结果
const intersectNoRepeatFirst = serveralArr => {
let minArr = serveralArr[0]
serveralArr.forEach(item => {
if(item.length < minArr.length){
minArr = item
}
})
const result = []
minArr.forEach(item => {
serveralArr.forEach(j => {
if(j.includes(item) && !result.includes(item)){
result.push(item)
}
})
})
return result
}
// ES6 方法实现数学意义上的交集结果
const intersectNoRepeatTwice = arrs => {
return arrs.reduce(function(prev,cur){
// return [...new Set(cur.filter((item)=>prev.includes(item)))]
return Array.from(new Set(cur.filter((item)=>prev.includes(item))))
})
}
// 输出数学意义上的交集结果
console.log(intersectNoRepeatFirst(serveralArr), intersectNoRepeatTwice(serveralArr)) // => (5) [3, 2, 4, 1, 5]; (5) [3, 2, 4, 5, 1]
// ES5 方法实现有重复元素的交集结果
const intersectRepeat = arr => {
const result = []
const tempArr = []
arr.forEach(item => {
const obj = {}
item.forEach(j => {
if(obj.hasOwnProperty(j)){
obj[j] += 1
}else{
obj[j] = 1
}
})
tempArr.push(obj)
})
let arrr = tempArr[0]
tempArr.forEach(item => {
if(item.length < arrr.length){
arrr = item
}
})
const newOjb = {}
Object.keys(arrr).forEach(item => {
newOjb[item] = Math.min.apply(Math, tempArr.map(function(o) {return o[item]}))
})
Object.keys(newOjb).forEach(item => {
if(newOjb[item]){
for(let i = 0; i < newOjb[item]; i++){
result.push(Number(item))
}
}
})
return result
}
// 输出有重复元素的交集结果
console.log(intersectRepeat(serveralArr)) // => (9) [1, 2, 2, 2, 3, 3, 4, 4, 5]
ccloveak commentedon Dec 3, 2021
It's helpful for me.
whenTheMorningDark commentedon Feb 21, 2022
emmachan613 commentedon Feb 21, 2022
lyllovelemon commentedon Feb 21, 2022
seyeeL commentedon Nov 17, 2022
编写一个函数计算多个数组的交集 | 前端瓶子君
reducer 多打了一个 r
emmachan613 commentedon Nov 17, 2022
lyllovelemon commentedon Nov 17, 2022