Проверка наличия ключа в многомерном массиве в 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');
}