检查数组是否在数组中

时间:2011-10-08 13:26:38

标签: javascript

标题应解释我的问题。

我有一个数组:

a = [[1,2],[1,3],[1,4]];

如何检查数组[1,2]是否在数组a内?

5 个答案:

答案 0 :(得分:2)

这取决于具体情况。

给出

var a = [1,2], b = [1,3], c = [a,b];

我们可以轻松检查a是否位于c,如果我们有c进行测试的话。

for(var i=0,d;d=c[i];i++) {
  if(d === a) {
    //a is inside c
  }
}

甚至更简单的支持它的浏览器(ie7没有)

if(c.indexOf(a) != -1) {
  //a is inside c
}

但是如果我们只有a,并且a不是局部变量,我们希望知道它是否存在于任何数组中,那么我们就不能,因为a是对对象的引用,我们不可能知道对它的引用是否存在于当前范围之外的其他地方。

答案 1 :(得分:1)

如果您有参考,则可以使用==运算符。否则你必须编写自己的方法来测试值。像这样的东西:

function someMethod(testArr, wanted){
  for (i=0; i<testArr.length; i++){
    if(array_diff(testArr[i], wanted).length==0 && array_diff(wanted, $subArr).length==0){
      return true;
    }
  }
  return false;
}

function array_diff(a1, a2)
{
  var a=[], diff=[];
  for(var i=0;i<a1.length;i++)
    a[a1[i]]=true;
  for(var i=0;i<a2.length;i++)
    if(a[a2[i]]) delete a[a2[i]];
    else a[a2[i]]=true;
  for(var k in a)
    diff.push(k);
  return diff;
}

答案 2 :(得分:0)

如果您的数组仅包含数字或文本,则可以将每个数组连接到字符串中,然后比较字符串是否在另一个数组内。

var a = [[1,2],[1,3],[1,4]];
var b = [1,2]

var aStr = '@' + a.join('@') + '@'
var bStr = '@' + b.join() + '@'

if (aStr.indexOf(bStr) > -1){
   alert ('b is inside a')
}else{
   alert ('b is not inside a')
}

答案 3 :(得分:0)

如果您的数组元素是非嵌套数组,则可以尝试此操作。

return JSON.stringify([[1,2],[1,3],[1,4]]).indexOf(JSON.stringify([1,2]))  > 0

这将检查[1,2]的JSON表示是否包含在[[1,2],[1,3],[1,4]]

的JSON表示中

但在这种情况下,它会给出假阳性

return JSON.stringify([[[1,2]],[1,3],[1,4]]).indexOf(JSON.stringify([1,2])) > 0

返回true。

答案 4 :(得分:0)

您也可以遍历数组对象,对于每个项目,您可以使用jQuery.isArray()来确定对象是否为数组。