检查一个数组是否在另一个数组中。

4
标题应该能够解释我的问题。
我有一个数组:
a = [[1,2],[1,3],[1,4]];

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


1
这不是重复的。[[1,2]].indexOf([1,2]) === -1 - pimvdb
5个回答

2
这取决于具体情况。
鉴于。
var a = [1,2], b = [1,3], c = [a,b];

如果我们有要测试的c,那么我们可以轻松地检查a是否存在于其中。
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
如果您有一个引用,那么您可以使用==运算符。否则,您必须编写自己的方法来测试值。类似这样的东西:
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
这是 PHP,他问的是 JavaScript。 - Ali
我建议您重新考虑您的回答,以免再次收到更多的负评。他要求的是JavaScript而不是PHP。 - brenjt
抱歉,我把它和另一个问题混淆了。我已经更正为JavaScript了。 :) - Ramzi Khahil

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')
}

0

如果你的数组元素是非嵌套的数组,你可以尝试这个。

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

这段代码检查了 JSON 表示形式的 [1,2] 是否包含在 JSON 表示形式的 [[1,2],[1,3],[1,4]] 中。

但是在这种情况下,它会产生错误的结果。

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

返回 true。


0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接