首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找数组中的交集元素

查找数组中的交集元素
EN

Stack Overflow用户
提问于 2018-01-25 13:25:00
回答 4查看 535关注 0票数 1

我需要构造一个函数交集,它比较输入数组并返回一个新的数组,其中包含在所有输入中找到的元素。如果每个数组中的数字只重复一次,则以下解决方案有效,否则将中断。另外,我不知道如何简化并且不使用杂乱的for循环:

代码语言:javascript
复制
function intersection(arrayOfArrays) {
  let joinedArray = [];
  let reducedArray = [];
  for (let iOuter in arrayOfArrays) {
    for (let iInner in arrayOfArrays[iOuter]) {
      joinedArray.push(arrayOfArrays[iOuter][iInner]);
    }
    return joinedArray;
  }


  for (let i in joinedArray.sort()) {
    if (joinedArray[i] === joinedArray[ i - (arrayOfArrays.length - 1)]) {
      reducedArray.push(joinedArray[i]);
    }
  }
  return reducedArray;
}
EN

回答 4

Stack Overflow用户

发布于 2018-01-25 13:43:05

试试这个:-

代码语言:javascript
复制
function a1(ar,ar1){
    x = new Set(ar)
    y = new Set(ar1)
    var result = [] 
    for (let i of x){
        if (y.has(i)){
            result.push(i)
        }
    }
    if (result){return result}
    else{ return 0}
}
var a= [3,4,5,6]
var b = [8,5,6,1]
console.log(a1(a,b)) //output=> [5,6]
票数 0
EN

Stack Overflow用户

发布于 2018-01-25 13:49:31

希望这段代码对我们有用。

代码语言:javascript
复制
var a = [2, 3, 9];
var b = [2, 8, 9, 4, 1];
var c = [3, 4, 5, 1, 2, 1, 9];
var d = [1, 2]

function intersect() {
  // create an empty array to store any input array,All the comparasion
  // will be done against this one
  var initialArray = [];
  // Convert all the arguments object to array
  // there can be n number of supplied input array
  // sorting the array by it's length. the shortest array 
  //will have at least all the elements
  var x = Array.prototype.slice.call(arguments).sort(function(a, b) {
    return a.length - b.length
  });
  initialArray = x[0];
  // loop over remaining array
  for (var i = 1; i < x.length; i++) {
    var tempArray = x[i];
    // now check if every element of the initial array is present
    // in rest of the arrays
    initialArray.forEach(function(item, index) {
      // if there is some element which is present in intial arrat but not in current array
      // remove that eleemnt.
      //because intersection requires element to present in all arrays
      if (x[i].indexOf(item) === -1) {
        initialArray.splice(index, 1)
      }

    })

  }
  return initialArray;
}

console.log(intersect(a, b, c, d))

票数 0
EN

Stack Overflow用户

发布于 2018-01-25 14:18:47

有一种很好的方法,使用reduce来遍历数组数组,然后使用filter来使剩余的值唯一。

代码语言:javascript
复制
function intersection(arrayOfArrays) {
    return arrayOfArrays
        .reduce((acc,array,index) => { // Intersect arrays
            if (index === 0)
                return array;
            return array.filter((value) => acc.includes(value));
        }, [])
        .filter((value, index, self) => self.indexOf(value) === index) // Make values unique
    ;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48436169

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档