indexOf()
的语法如何遍历多维数组?例如:var x = [];
// do something
x.push([a,b]);
x.indexOf(a) // ??
我想找到 'a
' 并对 'b
' 进行一些操作,但不起作用...由于这个方法应该是迭代的本身,所以我不认为使用其他迭代方式是一个好主意。目前我使用2个简单的数组来模拟这个过程,但我想这也应该可以解决问题...
indexOf()
的语法如何遍历多维数组?例如:var x = [];
// do something
x.push([a,b]);
x.indexOf(a) // ??
我想找到 'a
' 并对 'b
' 进行一些操作,但不起作用...由于这个方法应该是迭代的本身,所以我不认为使用其他迭代方式是一个好主意。目前我使用2个简单的数组来模拟这个过程,但我想这也应该可以解决问题...
简单来说: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
除非你想保留顺序,否则使用字典会更简单:
var x = {};
// do something
x[a] = b;
尽管顺序未定义,但仍然可以迭代键:
for (var key in x) {
alert(x[key]);
}
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
x[ x.indexOf(a) ]
这仅适用于有序对象/列表,并且仅在定义了Array.prototype.indexOf的情况下才有效。
x = [1,2], b = {one:function(){alert('gj')}}, c = x.push(b);
x[ x.indexOf( b ) ]['one']()
JavaScript没有多维数组,所以x
只是一个数组。此外,Array的indexOf
方法并不被所有浏览器支持,尤其是IE(至少到7版本),只在JavaScript 1.6中引入。
你唯一的选择就是手动搜索,在x
上迭代,并逐个检查每个元素。
{ }
呢? - Joel