簡體   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