繁体   English   中英

查看数组的子数组是否存在

[英]See if subarray of array exists

我有一个看起来像这样的数组:

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]) {
}

一个简单的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语句将基于结果进行切换。

萨尔曼的答案适合您的情况。 或者,您也可以创建一个动态函数以返回索引处的值,如果找不到,则返回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.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 

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

您可以使用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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM