从两个数组中找到相同的数字

时间:2018-04-24 15:32:57

标签: javascript

大家好,请帮我从两个带功能的数组中获取相同的数字。

function getIntersect(arrF, arrS){


    var arrF = [ 3, 5, 8];
    var arrS = [1, 2, 3, 5, 8];
    var nums = [];

    for ( var i = 0; i < arrF.length; i++ ){
        for ( var j = 0; j < arrS.length; j++ ){
             if ( i == j ){
                nums.push(i);
                nums.push(j);
                return nums;
             }
        }
    }
}

document.write(getIntersect());

8 个答案:

答案 0 :(得分:1)

您可以使用数组includes()来实现,以检查第一个数组(arrF)中的元素是否存在于第二个数组(arrS)中。

由于您正在编写函数(getIntersect()),因此可以在函数外部声明输入数组,并在调用函数时传递它们。通过这种方式,您可以将该函数重用于任何其他输入集。

var arrF = [ 3, 5, 8];
var arrS = [1, 2, 3, 5, 8];
function getIntersect(arrF, arrS){ 
  var nums = [];
  for ( var i = 0; i < arrF.length; i++ ){
      if ( arrS.includes(arrF[i]) ){
           nums.push(arrF[i]);
      }
  }
  return nums;
}

console.log(getIntersect());

答案 1 :(得分:1)

您可以使用Document来获得更简单的代码。

&#13;
&#13;
filter
&#13;
&#13;
&#13;

答案 2 :(得分:1)

以下是更新的代码,一些更新:

  • 在功能中添加了参数
  • 将return语句放在for循环
  • 之外
  • 比较值而不是索引
  • 而不是推送两个值,只推一个(因为它们是相同的)

&#13;
&#13;
var arrF = [3, 5, 8];
var arrS = [1, 2, 3, 5, 8];
var nums = [];

function getIntersect(arrF, arrS){

    for ( var i = 0; i < arrF.length; i++ ){
        for ( var j = 0; j < arrS.length; j++ ){
             if ( arrF[i] == arrS[j] ){
                nums.push(arrF[i]);
             }
        }
    }
     return nums;
}

document.write(getIntersect(arrF, arrS));
&#13;
&#13;
&#13;

答案 3 :(得分:0)

只需使用JavaScript中Array Objects上的reduce函数,即可达到预期的效果。

function getIntersect(arrF, arrS){
    return arrF.reduce((p, c) => {
        if(arrS.indexOf(c) !== -1) {
            p.push(c);
        }
        return p;
    }, [])
}

//invoke helper function
getIntersect([3,5,8], [1, 2, 3, 5, 8])

//output
// [3, 5, 8]

答案 4 :(得分:0)

您可以使用散列表的帮助,将值作为键,并将object的此属性设置为true

{
    3: true,
    5: true,
    8: true
}

这是针对第一个数组和第二个数组完成的,检查属性是否已设置,然后将值作为结果。

&#13;
&#13;
function getIntersect(a, b) {
    var hash = {},
        i,
        result = [];

    for (i = 0; i < a.length; i++) {
        hash[a[i]] = true;
    }
    for (i = 0; i < b.length; i++) {
        if (hash[b[i]]) {
            result.push(b[i]);
        }
    }
    return result;
}

console.log(getIntersect([3, 5, 8], [1, 2, 3, 5, 8]));
&#13;
&#13;
&#13;

使用Set的较短方法,并使用集合过滤第二个数组。

&#13;
&#13;
function getIntersect(a, b) {
    var setA = new Set(a);

    return b.filter(v => setA.has(v));
}

console.log(getIntersect([3, 5, 8], [1, 2, 3, 5, 8]));
&#13;
&#13;
&#13;

答案 5 :(得分:0)

使用数组过滤功能。

var arr1 = [1,2,3,4,5,6,7];
var arr2 = [5,6,7];

var arr3 = arr1.filter(function(item) { return arr2.indexOf(item) !== -1; }); 
console.log(arr3);

答案 6 :(得分:0)

我认为这比大多数答案都容易得多:

&#13;
&#13;
const getIntersect = (a1, a2) => a1.filter(val => a2.includes(val))

console.log(getIntersect([3, 5, 8, 12], [1, 2, 3, 5, 8]))
&#13;
&#13;
&#13;

答案 7 :(得分:-1)

function getIntersect(arrF, arrS){

    var arrF = [ 3, 5, 8];
    var arrS = [1, 2, 3, 5, 8];
    var nums = [];

    for ( var i = 0; i < arrF.length; i++ ){
        for ( var j = 0; j < arrS.length; j++ ){
             if ( arrF[i] == arrS[j] ){
                nums.push(arrF[i]);
             }
        }
    }
    return nums
}
document.write(getIntersect());