如何在两个数组中找到匹配的值?

2022-08-30 04:35:27

我有两个数组,我希望能够比较两者并仅返回匹配的值。例如,两个数组都有值,因此将返回该值。我没有找到这样的东西。返回相似性的最佳方式是什么?cat

var array1 = ["cat", "sum","fun", "run"];
var array2 = ["bat", "cat","dog","sun", "hut", "gut"];

//if value in array1 is equal to value in array2 then return match: cat

答案 1

您可以使用 :

const intersection = array1.filter(element => array2.includes(element));

答案 2

当然,我的方法是遍历第一个数组一次,并检查第二个数组中每个值的索引。如果索引是 ,则将其放到返回的数组上。> -1push

​Array.prototype.diff = function(arr2) {
    var ret = [];
    for(var i in this) {   
        if(arr2.indexOf(this[i]) > -1){
            ret.push(this[i]);
        }
    }
    return ret;
};

我的解决方案不像其他人那样使用两个循环,因此它可能会运行得更快一些。如果要避免使用 ,可以先对这两个数组进行排序,以重新索引它们的所有值:for..in

Array.prototype.diff = function(arr2) {
    var ret = [];
    this.sort();
    arr2.sort();
    for(var i = 0; i < this.length; i += 1) {
        if(arr2.indexOf(this[i]) > -1){
            ret.push(this[i]);
        }
    }
    return ret;
};

用法如下所示:

var array1 = ["cat", "sum","fun", "run", "hut"];
var array2 = ["bat", "cat","dog","sun", "hut", "gut"];

console.log(array1.diff(array2));

如果您在扩展数组原型时遇到问题,可以轻松地将其更改为函数。

var diff = function(arr, arr2) {

而且你会改变func最初说的任何地方。thisarr2