如果我有一个数组:
var array1=new Array();
array1[0]="two";
array1[1]="three";
array1[2]="four";
另一个阵列:
var array2=new Array();
array2[0]="one";
array2[1]="two";
array2[2]="three";
array2[3]="four";
array2[4]="five";
如何返回Array2中Array1存在的真值?
答案 0 :(得分:1)
使用集合论我们知道A是B的子集,当且仅当A的每个元素在B中都有一个等价元素时。
我做了一个plnkr显示:http://plnkr.co/edit/9l5QplwWq1m7ZAkXV9PX
使用简单的循环你可以这样做:
function isSubsetOf(arrayA, arrayB) {
for (var i = 0; i < arrayA.length;i++) {
var val = arrayA[i];
if (arrayB.indexOf(val) !== -1) {
continue;
} else {
return false;
}
}
return true;
}
答案 1 :(得分:1)
试试这样:
var arr1= ["two", "three"];
var arr2= ["two", "three", "four", "five"];
var isarraySubset = arr1.every(function(val) { return arr2.indexOf(val) >= 0; }));
console.log(isarraySubset ); // true
注意: - 强>
如果您支持的浏览器符合ECMA-262标准,此解决方案将起作用。
根据MDN ,
&#34;测试数组中的所有元素是否都通过了实现的测试 提供的功能。&#34;
以下是该方法的签名:
array.every(callback[, thisObject])
其中callback
是测试每个元素的函数,thisObject
指的是我们正在测试数组的对象
答案 2 :(得分:0)
使用Arrays.asList(array2)
将数组转换为列表,对于array1将数组转换为list,然后调用集合contains
方法
答案 3 :(得分:0)
var checkArray = [];
for ( var i; i<array1.length; i++ ){
if ( array2.indexOf( array1[i] ) !== -1 ) {
checkArray.push(array1[i]);
}
}
console.log("duplicate values : "+checkArray)// duplicate values : two,three,four
这可能不是最高效的方式(我没有测试它,它的伪代码)但最后checkArray应该包含array2中array1的所有值
答案 4 :(得分:0)
如果您的要求仅在序列[two,three,four]在array2中时返回true,则这是一个快速但不是100%正确的方法:
var sep = 'zzz_some_highly_unlikely_occurring_string_zzz';
array2.join(sep).indexOf( array1.join(sep) );
答案 5 :(得分:0)
var a1="";
for(var tmp:array1)
a1+=tmp;
var a2="";
for(var tmp:array2)
a2+=tmp;
现在检查a2中是否存在a1
a2.indexOf(a1)>-1
如果array1在array2中,则返回true