在二维数组中查找数组

时间:2014-03-02 20:14:25

标签: javascript

为什么indexOf在这种情况下给-1:

   var q = ["a","b"];
   var matchables = [["a","b"],["c"]];
   matchables.indexOf(q);

我如何确定q中是否可以找到matchables中存储的值?

3 个答案:

答案 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);