簡體   English   中英

JavaScript比較兩個數組

[英]JavaScript comparing two arrays

我有辦法在JavaScript中比較兩個數組嗎?

這是我的例子。

array1 = ['jpg','png'];

array 2 = ['jpg','pdf','png','bmp'];

我的情況下,我是否需要array2的所有元素都返回TRUE,或其他。 如果只有數組1中的一個元素匹配,數組2中的元素將返回FALSE。 命令其不重要。 基本上,這是對上傳文件的驗證,如果兩個文件的擴展名不正確,我會嘗試刪除按鈕。

我嘗試函數inarray,但我認為它僅適用於字符串而不適用於array

如果遺留問題不成問題,則可以執行以下操作:

var array1 = ['jpg','png','d'];
var array2 = ['jpg','pdf','png','bmp'];

var result = !array1.filter(function(a) { return array2.indexOf(a)==-1; }).length;   

// result is False

如果array1 所有元素都是array2一部分,則返回TRUE
只有array1一個元素匹配, array2元素返回FALSE

您可以通過兩種方式考慮這一點,

  • 取交點並檢查交點是否與輸入相同
  • 循環輸入,並在第一個不匹配時返回false

這是使用循環的示例

var a = [1, 3],
    b = [1, 5],
    c = [0, 1, 2, 3, 4];

function test(needles, haystack) {
    var i;
    for (i = 0; i < needles.length; ++i) {
        if (haystack.indexOf(needles[i]) === -1) {
            return false;
        }
    }
    return true;
}

test(a, c); // true
test(b, c); // false

如果使用第一個數組的值過濾第二個數組的結果是長度等於第一個數組的長度的數組,則第一個數組是第二個數組的子集。 您可以為此編寫一個函數,或者為Array.prototype附加一個方法:

 var array1 = ['jpg', 'png']; var array2 = ['jpg', 'pdf', 'png', 'bmp']; var array3 = ['jpg', 'bmp', 'pdf']; Helpers.log2Screen('array1 subset of array2? ', isSubset(array1, array2) ? 'yes' : 'no' ); // assign and use Array.prototype.subsetOf Array.prototype.subsetOf = isSubsetProto; Helpers.log2Screen('array1 subset of array3? ', array1.subsetOf(array3) ? 'yes' : 'no' ); function isSubset(arr1, arr2) { return arr2.filter( function (v) {return arr1.indexOf(v) > -1; } ).length == arr1.length; } function isSubsetProto(arr) { return arr.filter( function (v) {return this.indexOf(v) > -1; }, this ).length == this.length; } 
 <script src="http://kooiinc.github.io/JSHelpers/Helpers-min.js"></script> 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM