标题应解释我的问题。
我有一个数组:
a = [[1,2],[1,3],[1,4]];
如何检查数组[1,2]
是否在数组a
内?
答案 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]]
但在这种情况下,它会给出假阳性
return JSON.stringify([[[1,2]],[1,3],[1,4]]).indexOf(JSON.stringify([1,2])) > 0
返回true。
答案 4 :(得分:0)
您也可以遍历数组对象,对于每个项目,您可以使用jQuery.isArray()来确定对象是否为数组。