【问题标题】:indexOf syntax for multidimensional arrays?多维数组的 indexOf 语法?
【发布时间】:2009-09-15 14:46:36
【问题描述】:

indexOf() 遍历多维数组的语法是什么? 例如:

var x = [];
// do something
x.push([a,b]);

x.indexOf(a) // ??

我想找到“a”并用“b”做一些事情。但它不起作用......由于这种方法本身应该是迭代的,我不认为使用任何其他迭代会是一件好事。目前我使用 2 个简单的数组来模拟这个,但我想这也应该可以工作......

【问题讨论】:

  • 您要创建字典吗?为什么不使用对象? { }
  • 四种不同编码的建议是否对您有用?只是好奇。

标签: javascript arrays syntax


【解决方案1】:

简单地说:indexOf() 不能这样工作。如果您执行以下操作,它可能会起作用:

var x = [];
// do something
z = [a,b];
x.push(z);

x.indexOf(z);

但是你已经有了 z.b 不是吗?因此,如果您必须忽略每个认为使用对象(或字典)实际上更容易的人的建议,您将不得不使用 Ates Goralapproach,或者自己搜索索引:

Array.prototype.indexOf0 = 
  function(a){for(i=0;i<this.length;i++)if(a==this[i][0])return i;return null;};
var x = [];
// do something
x.push([a,b]);

x.indexOf0(a); //=> 0

【讨论】:

    【解决方案2】:

    您可以按照 Philippe Leybaert 的建议使用对象(或字典)。这将允许快速访问元素:

    var x = {};
    
    x[a] = b; // to set
    
    alert(x[a]) // to access
    

    但是如果你坚持使用indexOf,还是有办法的,不管它有多丑:

    var x = [];
    
    var o = Object(a); // "cast" to an object
    o.b = b; // attach value
    
    x.push(o);
    
    alert(x.indexOf(a)); // will give you the index
    alert(x[1].b); // access value at given index
    

    【讨论】:

      【解决方案3】:

      除非你想保持顺序,否则使用字典要简单得多:

      var x = {};
      
      // do something
      
      x[a] = b;
      

      您仍然可以遍历键,尽管顺序未定义:

      for (var key in x) {
         alert(x[key]);
      }
      

      【讨论】:

      • 使用 x[a] 代替 x.a。 “a”不是键名,而是保存键的变量。
      【解决方案4】:

      JavaScript 本身没有多维数组,所以x 只是一个数组。此外,并非所有浏览器都支持 Array 的 indexOf 方法,尤其是 IE(至少到 7 版),仅在 JavaScript 1.6 中引入。

      您唯一的选择是手动搜索,遍历x 并依次检查每个元素。

      【讨论】:

        【解决方案5】:
        x[ x.indexOf(a) ]
        

        这仅适用于有序对象/列表,并且仅在定义了 Array.prototype.indexOf 时才有效。

        x = [1,2], b = {one:function(){alert('gj')}}, c = x.push(b);
        
        x[ x.indexOf( b ) ]['one']()
        

        【讨论】:

        • 嗯,你一定是用不同的方式做的,因为我做的方式很有效。我确实注意到这 ONLY 适用于按数字排序并具有长度属性的数组,而不适用于“多维”或字典。
        • 注意 - 您还需要对原始对象的引用才能提供给“b”的引用,具有相似属性的类似对象仍然不同。
        猜你喜欢
        • 2023-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-16
        • 1970-01-01
        • 1970-01-01
        • 2016-06-11
        • 1970-01-01
        相关资源
        最近更新 更多