The title should explain my question.
I have an array:
a = [[1,2],[1,3],[1,4]];
How can I check if the array [1,2]
is inside the array a
?
That depends on the situation.
given
var a = [1,2], b = [1,3], c = [a,b];
We can check easily if a
resides in c
, if we have c
to test on.
for(var i=0,d;d=c[i];i++) { if(d === a) { //a is inside c } }
or even simpler for browser that supports it (ie7 doesn't)
if(c.indexOf(a) != -1) { //a is inside c }
But if we only have a
, and a
is not a local variable and we wish to know if it exists inside any array, then we can't, since a
is a reference to an object and we can't possibly know if a reference to it exists elsewhere outside our current scope.
if you have a reference, the you can use the ==
operator. else you have to write your own method to test values. something like this:
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; }
If your array contains numbers or texts only, you can join each array into string, then compare if a string is inside the other.
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') }
You can try this if your array elements are non-nested arrays.
return JSON.stringify([[1,2],[1,3],[1,4]]).indexOf(JSON.stringify([1,2])) > 0
This checks if the JSON representation of [1,2]
is contained in the JSON representation of [[1,2],[1,3],[1,4]]
But in this case it gives a false positive
return JSON.stringify([[[1,2]],[1,3],[1,4]]).indexOf(JSON.stringify([1,2])) > 0
returns true.
You can also loop through the array object and for each of it's item you can use jQuery.isArray() to determine if the object is an array.
[[1,2]].indexOf([1,2]) === -1
.