JavaScript比较两个数组

时间:2014-12-29 13:15:20

标签: javascript

我是否可以在JavaScript中比较两个数组;

这是我的榜样。

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

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

我的情况我需要,如果array2的array1部分的所有元素都返回TRUE,或者其他什么。如果只有一个数组1的元素匹配,则数组2中的元素返回FALSE。命令它不重要。 Basciclly这是对上传文件的验证,如果两个文件没有正确的扩展名,我会尝试删除按钮。

我尝试函数inarray,但我认为它只适用于字符串而不是数组

3 个答案:

答案 0 :(得分:2)

如果遗产不是问题,可以这样做:

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

答案 1 :(得分:0)

  

如果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

答案 2 :(得分:0)

如果使用第一个数组的值过滤第二个数组的结果是长度等于第一个数组长度的数组,则第一个数组是第二个数组的子集。您可以为此编写函数,或为Array.prototype

添加额外的方法

&#13;
&#13;
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;
}
&#13;
<script src="http://kooiinc.github.io/JSHelpers/Helpers-min.js"></script>
&#13;
&#13;
&#13;