indexOf синтаксис для многомерных массивов? - PullRequest
8 голосов
/ 15 сентября 2009

Каков синтаксис для indexOf() для прохождения многомерного массива? Например:

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

x.indexOf(a) // ??

Я хочу найти 'a' и сделать что-нибудь с 'b'. Но это не работает ... Поскольку этот метод сам по себе должен быть итеративным, я не предполагаю, что использование какой-либо другой итерации было бы полезно В настоящее время я моделирую это, используя 2 простых массива, но я думаю, что это должно как-то работать тоже ...

Ответы [ 5 ]

3 голосов
/ 16 сентября 2009

Просто: 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 голос
/ 15 сентября 2009

Вы можете использовать объект (или словарь), как предложил Филипп Лейбер. Это позволит быстрый доступ к элементам:

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
1 голос
/ 15 сентября 2009

Если вы не хотите сохранять порядок, гораздо проще использовать словарь:

var x = {};

// do something

x[a] = b;

Вы все еще можете перебирать ключи, хотя порядок не определен:

for (var key in x) {
   alert(x[key]);
}
0 голосов
/ 15 сентября 2009
x[ x.indexOf(a) ]

Это будет работать только с упорядоченными объектами / списками и только если определен Array.prototype.indexOf.

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

x[ x.indexOf( b ) ]['one']()
0 голосов
/ 15 сентября 2009

JavaScript не имеет многомерных массивов как таковых, поэтому x - это просто массив. Кроме того, метод Array indexOf поддерживается не во всех браузерах, в частности в IE (по крайней мере, до версии 7), только в JavaScript 1.6.

Ваш единственный вариант - поиск вручную, итерация по x и проверка каждого элемента по очереди.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...