在Javascript中比较数组

时间:2013-12-25 18:07:36

标签: javascript arrays

如果我有一个数组:

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存在的真值?

6 个答案:

答案 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