为什么indexOf
在这种情况下给-1:
var q = ["a","b"];
var matchables = [["a","b"],["c"]];
matchables.indexOf(q);
我如何确定q
中是否可以找到matchables
中存储的值?
答案 0 :(得分:7)
因为indexOf
使用===
作为比较标记。
===
s)进行操作的 Array
检查Objects
是否相同。在JavaScript中,Objects
仅在引用相同变量时才相同。
试试看我的意思(在控制台中):
([])===([])
返回false
因为它们不占用内存中的相同空间。
您需要循环并使用自己的等式检查来查找true/false/string primitive/number primitive/null/undefined
// Only checks single dimensional arrays with primitives as elements!
var shallowArrayEquality = function(a, b){
if(!(a instanceOf Array) || !(b instanceof Array) || a.length !== b.length)
return false;
for(var ii=0; ii<a.length; ii++)
if(a[ii]!==b[ii])
return false;
return true;
};
var multiDimensionalIndexOf = function(multi, single){
for(var ii=0; ii<a.length; ii++)
if(shallowArrayEquality(multi[ii], single) || multi[ii] === single)
return ii;
return -1;
};
multiDimensionalIndexOf(matchables, q); // returns 0
答案 1 :(得分:3)
由于
["a","b"] === ["a","b"]
是false
。
答案 2 :(得分:-1)
让它发挥作用的方法就是:
var q = ["a", "b"];
var matchables = [q, ["c"]];
matchables.indexOf(q);