我是否可以在JavaScript中比较两个数组;
这是我的榜样。
array1 = ['jpg','png'];
array 2 = ['jpg','pdf','png','bmp'];
我的情况我需要,如果array2的array1部分的所有元素都返回TRUE,或者其他什么。如果只有一个数组1的元素匹配,则数组2中的元素返回FALSE。命令它不重要。 Basciclly这是对上传文件的验证,如果两个文件没有正确的扩展名,我会尝试删除按钮。
我尝试函数inarray,但我认为它只适用于字符串而不是数组
答案 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
:
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;