Проверьте наличие ключа в многомерном массиве в JavaScript - PullRequest
7 голосов
/ 27 февраля 2011

Надеюсь, простой вопрос.

Почему проверка на наличие ключа в многомерном массиве:

a = new Array(Array());
a[0][0]='1';
a[0][1]='2';
if(a[1][2] == undefined){
alert("sorry, that key doesn't exist");
} else {alert('good, your key exists');
}

не работает в общем, но работает, когда япроверьте первый индекс (в данном случае, «0»), который «определен» как a[0][x].Например, когда я запрашиваю a[0][2] (который не определен), он показывает первое предупреждение.Однако, когда я запрашиваю a[1][0], я получаю:

"Uncaught TypeError: Невозможно прочитать свойство '0' из неопределенного"

Как я могу решить эту проблему?

Спасибо

Ответы [ 5 ]

8 голосов
/ 27 февраля 2011

Сначала проверьте, существует ли первое измерение, затем существует ли ключ во втором измерении

Логика вернет false, если первый тест вернет false, и проверит второе измерение только , если первое - true.

  if(a[1] == undefined && a[1][2] == undefined)
2 голосов
/ 27 февраля 2011

С первыми тремя назначениями ваш массив на самом деле выглядит следующим образом:

a = [['1','2']]

Чтение a[0][2] просто возвращает undefined, поскольку a[0] существует, но его свойство '0' не определено.

Но при попытке прочитать a[1][0] выдается TypeError , поскольку a[1] уже undefined и не является объектом и, следовательно, не имеет никаких свойств.Это также сообщение об ошибке:

Невозможно прочитать свойство '0' из неопределенного.

Вы можете решить эту проблему, сначала проверив a[1], а затемпроверка a[1][0] с помощью оператора typeof:

if (typeof a[1] !== 'undefined' && typeof a[1][0] !== 'undefined')
1 голос
/ 27 февраля 2011

Вам просто необходимо дополнительно квалифицировать условное.Поскольку индекс [1] массива не определен, вы не можете проверить его значения.

if(a[1] === undefined || a[1][2] === undefined)
1 голос
/ 27 февраля 2011
a = Array(Array())

не определяет многомерный массив.Он просто определяет массив с одним элементом, который оказывается другим (пустым) массивом.В javascript нет встроенных многомерных массивов, поэтому вам придется обрабатывать вещи более вручную.

0 голосов
/ 27 февраля 2011
var a = Array(Array());
a[0][0]='1';
a[0][1]='2';
if(a[1] === undefined || a[1][2] === undefined) {
    alert("sorry, that key doesn't exist");
} else {
    alert('good, your key exists');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...