Javascript 多维数组的indexOf语法?
Javascript 多维数组的indexOf语法?,javascript,arrays,syntax,Javascript,Arrays,Syntax,indexOf()遍历多维数组的语法是什么? 例如: var x = []; // do something x.push([a,b]); x.indexOf(a) // ?? 我想找到“a”并用“b”做点什么。但它不起作用。。。由于这种方法本身应该是迭代的,所以我不认为使用任何其他迭代都是一件好事。目前,我使用两个简单的数组来模拟它,但我想这应该也能起作用……JavaScript本身没有多维数组,因此x只是一个数组。另外,并非所有浏览器都支持数组的indexOf方法,特别是IE(至少在版本
indexOf()
遍历多维数组的语法是什么?
例如:
var x = [];
// do something
x.push([a,b]);
x.indexOf(a) // ??
我想找到“
a
”并用“b
”做点什么。但它不起作用。。。由于这种方法本身应该是迭代的,所以我不认为使用任何其他迭代都是一件好事。目前,我使用两个简单的数组来模拟它,但我想这应该也能起作用……JavaScript本身没有多维数组,因此x
只是一个数组。另外,并非所有浏览器都支持数组的indexOf
方法,特别是IE(至少在版本7之前),它仅在JavaScript 1.6中引入
您唯一的选择是手动搜索,迭代
x
并依次检查每个元素。除非您想保持顺序,否则使用字典要简单得多:
var x = {};
// do something
x[a] = b;
尽管顺序未定义,但仍可以迭代键:
for (var key in x) {
alert(x[key]);
}
这仅适用于有序对象/列表,并且仅在定义了Array.prototype.indexOf时有效
x = [1,2], b = {one:function(){alert('gj')}}, c = x.push(b);
x[ x.indexOf( b ) ]['one']()
您可以按照Philippe Leybaert的建议使用对象(或字典)。这将允许快速访问元素:
var x = {};
x[a] = b; // to set
alert(x[a]) // to access
但如果你坚持使用索引
,还有一种方法,不管它有多难看:
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
简单地说:indexOf()
不是这样工作的。如果您这样做,它可能会起作用:
var x = [];
// do something
z = [a,b];
x.push(z);
x.indexOf(z);
但是你已经有z.b了,不是吗?因此,如果您必须忽略所有认为使用对象(或字典)实际上更容易的人的建议,那么您必须使用或自己搜索索引:
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
Array.prototype.indexOf0=
函数(a){for(i=0;i0
你想创建一个字典吗?为什么不使用一个对象呢?{}
四个不同编码的建议对你有用吗?只是好奇。用x[a]代替x.a.“a”不是键名,而是保存键的变量。好吧,你一定做得不一样,因为我这样做的方式。我注意到这只适用于按数字顺序排列且具有长度属性的数组,而不适用于“多维”或者字典。注意-对于要提供给“b”的引用,您还需要有对原始对象的引用,具有类似属性的类似对象仍然是不同的。
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