多维数组的indexOf语法是什么?

8
indexOf() 的语法如何遍历多维数组?例如:
var x = [];
// do something
x.push([a,b]);

x.indexOf(a) // ??

我想找到 'a' 并对 'b' 进行一些操作,但不起作用...由于这个方法应该是迭代的本身,所以我不认为使用其他迭代方式是一个好主意。目前我使用2个简单的数组来模拟这个过程,但我想这也应该可以解决问题...


你是否正在尝试创建一个字典?为什么不使用一个对象 { } 呢? - Joel
这四种不同编码方式的建议中,有哪一种对你有效吗?只是好奇。 - dlamblin
5个回答

3

简单来说:indexOf()不能这样使用。如果您采用以下方式,则可能会起作用:

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

x.indexOf(z);

但是你已经有了z.b,不是吗?所以如果你必须忽略每个人都认为使用对象(或字典)实际上更容易的建议,那么你就必须使用Ates Goral方法,或者自己搜索索引:

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

1

除非你想保留顺序,否则使用字典会更简单:

var x = {};

// do something

x[a] = b;

尽管顺序未定义,但仍然可以迭代键:

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

使用x[a]代替x.a。 "a"不是键名,而是保存键的变量。 - Ates Goral

1
你可以像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

0
x[ x.indexOf(a) ]

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

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

x[ x.indexOf( b ) ]['one']()

你一定是用了不同的方法,因为我用的方法是有效的。我注意到这种方法仅适用于数字排序并具有长度属性的数组,而不适用于“多维”或字典类型的数组。 - meder omuraliev
请注意,您在向“b”提供引用时也需要参考原始对象,即使是具有类似属性的相似对象仍然是不同的。 - meder omuraliev

0

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

你唯一的选择就是手动搜索,在x上迭代,并逐个检查每个元素。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接