比较两个数组的JavaScript

比较两个数组的JavaScript,javascript,Javascript,JavaScript中是否有比较两个数组的方法 这是我的例子 array1 = ['jpg','png']; array 2 = ['jpg','pdf','png','bmp']; 如果array1的所有元素都是array2的一部分,那么我需要我的案例。若数组1中只有一个元素匹配,则数组2中的元素返回FALSE。秩序并不重要。基本上这是对上传文件的验证,如果两个文件的扩展名不正确,我尝试删除按钮 我尝试使用函数inarray,但我认为它只适用于字符串而不是数组如果遗留问题不存在,类似这样的

JavaScript中是否有比较两个数组的方法

这是我的例子

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

array 2 = ['jpg','pdf','png','bmp'];
如果array1的所有元素都是array2的一部分,那么我需要我的案例。若数组1中只有一个元素匹配,则数组2中的元素返回FALSE。秩序并不重要。基本上这是对上传文件的验证,如果两个文件的扩展名不正确,我尝试删除按钮


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

如果遗留问题不存在,类似这样的操作可以:

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];
功能测试(针、草堆){
var i;
对于(i=0;i
如果使用第一个数组的值筛选第二个数组的结果是长度等于第一个数组长度的数组,则第一个数组是第二个数组的子集。您可以为此编写一个函数,或者为数组分配一个额外的方法。prototype

var array1=['jpg','png'];
var array2=['jpg','pdf','png','bmp'];
var array3=['jpg','bmp','pdf'];
Helpers.log2Screen('array1数组2的子集?',
isSubset(array1,array2)?“是”:“否”);
//分配并使用Array.prototype.subsetOf
Array.prototype.subsetOf=isSubsetProto;
Helpers.log2Screen('array1数组3的子集?',
阵列1.子条款(阵列3)?“是”:“否”);
功能发布集(arr1、arr2){
返回arr2.0滤波器(
函数(v){返回arr1.indexOf(v)>-1;}
).length==arr1.length;
}
功能isSubsetProto(arr){
返回阵列滤波器(
函数(v){返回this.indexOf(v)>-1;},这个
).length==此.length;
}

array1
array2
相比返回
true
array2
array1
相比返回
false
?我在某处听说你可以将每个数组的
与字符串
进行比较。我不认为这是重复的。这个问题询问如何测试
array1
是否是
array2
的一个子集,其中顺序无关紧要,这似乎与测试两个数组的相等性完全不同。我不能百分之百确定这是不是一个好问题(也许它太具体了,对未来可能的读者没有帮助?也许不是?),但它不是重复的。这根本不是重复的。但它已经关闭了,所以不管怎样@弗拉基米尔·什图斯(VladimirŠtus)给出了一个经过适当验证的答案。还要检查loxxy的答案,以获得解决问题的另一个有效解决方案。OP希望检查所有元素是否都存在,
intersection.length===array1.length
@PaulS。此答案中的代码似乎行为正确。它消除了匹配项,并测试了
数组1
中剩余的任何不匹配项(因此,非零长度是一种失败条件,意味着某些项没有作为匹配项消除)。这是正确的,但不是最佳答案。无需进一步检查,因为某些内容已返回
-1
。根据@dfsq的建议,更好的解决方案可能是
array1.every(函数(a){return array2.indexOf(a)!=-1;})
,它将在第一次失败时尽早返回
false
(这里使用
每一个
对我来说似乎比
过滤器更惯用,但这有点挑剔)。@apsillers不,我的建议是
!array1.some(function(el){return array2.indexOf(el)=-1;
,所以它不会进一步检查是否有什么东西已经
-1