标题应该能够解释我的问题。
我有一个数组:
我有一个数组:
a = [[1,2],[1,3],[1,4]];
如何检查数组[1,2]
是否在数组a
中?
a = [[1,2],[1,3],[1,4]];
如何检查数组[1,2]
是否在数组a
中?
var a = [1,2], b = [1,3], c = [a,b];
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
是一个对象的引用,我们无法确定它的引用是否存在于当前作用域之外。
==
运算符。否则,您必须编写自己的方法来测试值。类似这样的东西: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;
}
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')
}
如果你的数组元素是非嵌套的数组,你可以尝试这个。
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。
[[1,2]].indexOf([1,2]) === -1
。 - pimvdb