代码之家  ›  专栏  ›  技术社区  ›  PineNuts0

javascript:构造一个函数,比较输入数组并返回一个新数组,其中包含在所有输入中找到的元素[重复]

  •  3
  • PineNuts0  · 技术社区  · 7 年前

    我试图构造一个函数交集,用于比较输入数组并返回一个新数组,其中包含在所有输入中找到的元素。

    下面是我的代码:

    function intersection (arr){
    
      let newArray = []; 
    
      let concatArray = arr.reduce((a,e) => a.concat(e), [])
      //let uniqueArray = Array.from(new Set(concatArray));
    
      // console.log(concatArray)
    
      for (let i=0; i<concatArray.length; i++){
        let element = concatArray[i]; 
    
        concatArray.shift()
    
        if (concatArray.includes(element)){
          newArray.push(element); 
        }
    
      }
      return newArray; 
    }
    
    const arr1 = [5, 10, 15, 20];
    const arr2 = [15, 88, 1, 5, 7];
    const arr3 = [1, 10, 15, 5, 20];
    console.log(intersection([arr1, arr2, arr3])); // should log: [5, 15]
    

    我的代码返回: [ 5, 15, 15, 1, 7, 10, 5 ] 这太离谱了

    我做错了什么?

    1 回复  |  直到 7 年前
        1
  •  4
  •   Mohammad Usman    7 年前

    您可以简单地使用 .filter() .every() 获得所需输出的方法:

    const arr1 = [5, 10, 15, 20];
    const arr2 = [15, 88, 1, 5, 7];
    const arr3 = [1, 10, 15, 5, 20];
    
    const intersection = ([first, ...rest]) => first.filter(
        v => rest.every(arr => arr.includes(v))
    );
    
    console.log(intersection([arr1, arr2, arr3]));