У меня есть массив, который выглядит так:
var array = [[10, 8, 2], [5, 7, 1], [3, 9, 4]];
Мне нужно что-то, что говорит мне, существует ли дополнительный объект, не вызывая ошибки. Вот пример:
elementExsits(array[0][4]);
//false
elementExsists(array[1][2]);
//true
Функция elementExsists
бы проверить его путь существует. Я пробовал:
if (typeof array[3][2] !== 'undefined') {};
Но это просто говорит
Cannot read property '2' of undefined
Вы проверяете одно свойство одновременно. Остановитесь, если вы столкнулись с неопределенным:
if (typeof array[3] !== "undefined" && typeof array[3][2] !== "undefined") {
}
Или лучше:
if (3 in array && 2 in array[3]) {
}
Ответ Салмана работает для вашего сценария. Или вы также можете создать динамическую функцию, чтобы возвращать значение в индексе, или undefined, если не найдено.
var array = [[10, 8, 2], [5, 7, 1], [3, 9, 4]];
function elementExists(array, ...indices){
return indices.reduce((el, i) => el && el[i], array)
}
console.log(elementExists(array, 0, 4))
console.log(elementExists(array, 1, 2))
console.log(elementExists(array, 3, 2))
array = [[10, [1,[11,12]],8, 2]]
и elementExists(array,0,1,1,0)
дает вам 11
. (Четыре уровня в глубину).
Простой оператор if может решить, существует ли элемент:
var array = [[10, 8, 2], [5, 7, 1], [3, 9, 4]];
if (array[1] && array[1][2]) {
console.log('exists');
} else {
console.log('doesn\'t exist');
}
if (array[10] && array[10][2]) {
console.log('exists');
} else {
console.log('doesn\'t exist');
}
Пытаться получить доступ к значению массива, который не существует, возвращается undefined
, поэтому если инструкции будут переключаться на основе результата.
array[10][1]
.
function elementExists(a, i, j) {
return Array.isArray(a) && Array.isArray(a[i]) && a[i].length > j;
}
console.log(elementExists(null, 0, 1));
console.log(elementExists(undefined, 0, 1));
console.log(elementExists(0, 0, 1));
console.log(elementExists('foo', 0, 1));
console.log(elementExists([], 0, 1));
console.log(elementExists([null], 0, 1));
console.log(elementExists([0], 0, 1));
console.log(elementExists([[]], 0, 1));
console.log(elementExists([[],[]], 0, 1));
console.log(elementExists([[3],[9]], 0, 1));
console.log(elementExists([[3,2],[9]], 0, 1));
У вас есть только 3 элемента в вашем массиве в первом измерении. Это означает, что вы получите сообщение об ошибке при попытке вызвать индекс в неопределенном элементе. Вы можете связать оператор if с &&
следующим образом:
if (typeof array[3] !== 'undefined' && typeof array[3][2] !== 'undefined') {};
Вы также можете сделать что-то вроде следующего, чтобы иметь функцию, которая проверяет и как много измерений для существования по мере необходимости (также предлог использовать рекурсию с моей стороны). Просто pas в массиве и индексы, которые он должен проверять в многомерном массиве.
let array = [[10, 8, 2], [5, 7, 1], [3, 9, 4]];
function testArray(array, ...rest) {
if (rest.length > 0) {
console.log(rest[0])
let subArray = array[rest[0]]
if (!subArray )
return false;
rest.shift(0);
return testArray(subArray, ...rest)
}
return true;
}
console.log(testArray(array, 3, 2));
Вы можете взять массив и список индексов и использовать Array.every()
индексы. Если все индексы не undefined
элемент существует. Если событие одно не undefined
, элемент не существует.
const elementExists = (array, ...indexes) => {
let current = array;
return indexes.every(index => {
current = array[index];
return current !== undefined;
});
};
const array = [[10, 8, 2], [5, 7, 1], [3, 9, 4]];
console.log(elementExists(array, 0, 4)); // false
console.log(elementExists(array, 1, 2)); // true
console.log(elementExists(array, 3, 2)); // false
Вы можете использовать in
операторе и проверить, существует ли индекс. Затем перейдите к следующему вложенному массиву.
Это решение работает с массивом и массивом индексов и использует короткое замыкание с Array#every
, если индекс не находится в данном массиве.
function elementExsists(array, indices) {
return indices.every(i => Array.isArray(array) && i in array && (array = array[i], true))
}
var array = [[10, 8, 2], [5, 7, 1], [3, 9, 4]];
console.log(elementExsists(array, [0, 4])); // false
console.log(elementExsists(array, [1, 2])); // true