Проверка наличия ключа в многомерном массиве в javascript

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

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

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 ответов


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

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

  if(a[1] == undefined && a[1][2] == undefined)

С первыми тремя назначениями Ваш массив на самом деле выглядит так:

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

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

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

не удается прочитать свойство '0' из не определено.

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

if (typeof a[1] !== 'undefined' && typeof a[1][0] !== 'undefined')

a = Array(Array())

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


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

if(a[1] === undefined || a[1][2] === undefined)

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');
}