繁体   English   中英

如何判断JavaScript中一个数组中的值是否等于另一个数组中的值?

[英]How can I tell if a value in one array is equal to a value in another array in Javascript?

在Javascript中,我有2个数组,每个数组包含15个字符串元素,每个数组从0到17个字符。

如何判断这两个数组中第一个数组的值是否等于第二个数组中的一个?

例:

var array1 = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o'];
var array2 = ['z','z','z','z','z','z','z','z','z','z','z','z','z','o','z'];
myFunction(array1,array2); // returns false

范例2:

var array1 = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','s'];
var array2 = ['z','z','z','z','z','z','z','z','z','z','z','z','z','o','z'];
myFunction(array1,array2); // returns true

假设dbaupp是正确的,并且您有一个错字,则要查找两个数组的交集,并查看它是否为非空。

两个集合的交集表示两个原始集合具有相同元素的集合。 如果至少有一个公共元素,则交集将为非空。

为此,请参见

JavaScript中数组交集的最简单代码

此代码检查两个列表是否具有公共元素,方法是对列表进行排序,然后将它们一起逐步执行,以使“后面”的任何列表前进。

function(list1, list2) {
    var l1 = list1.sort(), l2 = list2.sort(),
        len1 = l1.length, len2 = l2.length,
        i1 = 0, i2 = 0;

    while (i1 < len1 && i2 < len2) {
        if (l1[i1] == l2[i2])
            return true;

        if (l1[i1] < l2[i2])
            i1++;
        else
            i2++;
    }
    return false;
}

注意 正如Eric所说的,您也可以将两个列表相交,并检查结果列表是否为非空,但是这里的代码将更加高效,因为它不必生成一个全新的列表,也不必去做如果有一个共同的元素,则通过所有两个列表。

埃里克·J(Eric J.)关于交叉口的建议可能是解决问题的最优雅的方法。

您所要求的内容的简单翻译可以像这样工作:

function containsAny(array1, array2) {
  for (var i=0; i<array1.length; i++) {
      for (var j=0; j<array2.length; j++) {
          if (array1[i] == array2[j]) return true;
      }
  }
  return false;
}

var array1 = ['a','b','c'];
var array2 = ['1','2','3'];
var array3 = ['a','b','2'];

containsAny(array1, array2); // returns false
containsAny(array2, array3); // returns true 
containsAny(array1, array3); // returns true

好的,假设我正确地理解了您的问题,我将使用JQuery的“ each”方法将一个与2个数组的元素匹配的小提琴扔在一起:

http://jsfiddle.net/phillipkregg/Ug3DM/1/

var array1 = ["a","b","c","o"];
var array2 = ["z","z","b","z","z","o"];

array1.each(function(item){
    var element = item;        
    var match = [];
    array2.each(function(item2) {
        if (item2 === element)
        {
            match.push(item2); 
            alert(match);

        }            
    });                   
});​

也许这会让您入门。

我尝试在楼上使用“每种”方法,但似乎不起作用,而“每种”用于对象而不是数组。 所以我更改代码。

var array1 = ["a","b","c","o"];
var array2 = ["z","z","b","z","z","o"];
var match = [];
$.each(array1, function(key, val){
var element = val;
    $.each(array2, function(key, val){
    if(element === val)
    {
    match.push(val);
    }
    });
});
$.each(match, function(key, val){
    alert(key+'--'+val);
});

大多数浏览器使用内置的Arrays的indexOf和filter方法,如果经常使用这些方法,则可以有条件地将它们添加到较旧的浏览器中。

var array1= ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 's'];
var array2= ['z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'z', 'o', 'z'];
var array3= ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'o', 'k', 'l', 'm', 'n', 's'];


1. array1.inCommon(array2)>>
(array length 0)

2. array2.inCommon(array3)>>
(array length 1)
o

3. array3.inCommon(array1)>>
(array length 14)
a, b, c, d, e, f, g, h, i, k, l, m, n, s



Array.prototype.inCommon= function(ar){
    return this.filter(function(itm){
        return ar.indexOf(itm)!= -1;
    });
}

Array.prototype.indexOf= Array.prototype.indexOf || function(what, i){
    if(typeof i!= 'number') i= 0;
    var L= this.length;
    while(i< L){
        if(this[i]=== what) return i;
        ++i;
    }
    return -1;
}

Array.prototype.filter= Array.prototype.filter || function(fun, scope){
    var T= this, A= [], i= 0, itm, L= T.length;
    if(typeof fun== 'function'){
        while(i< L){
            if(i in T){
                itm= T[i];
                if(fun.call(scope, itm, i, T)) A[A.length]= itm;
            }
            ++i;
        }
    }
    return A;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM