我有一个看起来像这样的数组:
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
答案 0 :(得分:4)
您一次检查一个属性。如果遇到未定义,请停止:
if (typeof array[3] !== "undefined" && typeof array[3][2] !== "undefined") {
}
或更佳:
if (3 in array && 2 in array[3]) {
}
答案 1 :(得分:2)
一个简单的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
,因此if语句将根据结果进行切换。
答案 2 :(得分:2)
答案 3 :(得分:0)
您可以获取一个数组和一个索引列表,并使用Array.every()
迭代索引。如果所有索引都不是undefined
,则该元素存在。如果事件1是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
答案 4 :(得分:0)
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));
答案 5 :(得分:0)
您可以使用in
operator并检查索引是否存在。然后继续下一个嵌套数组。
此解决方案适用于数组和索引数组,并且如果索引不在给定数组中,则使用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