在几层深度的结构中测试数组元素是否存在的最佳方法是什么?例如:
if (typeof arr[a][b][c] === 'undefined') { ...do something... }
如果[a]或[b]不存在,我们将无法测试[c]。
是否有下划线或lodash功能来处理这个问题?
答案 0 :(得分:1)
你可以做到
if (arr && arr[a] && arr[a][b] && typeof arr[a][b][c] === 'undefined') { ...do something... }
或者您可以创建自定义功能
function check(arr){
let temp = arr;
for(let i=1; i<arguments.length; i++){
if(temp[arguments[i]] == undefined){
return false;
}
temp = temp[arguments[i]];
}
return true;
}
let arr= [[[1], [2]], [3]];
console.log(check(arr, 0, 0));
console.log(check(arr, 0, 0, 0, 0));
&#13;
答案 1 :(得分:1)
你需要在许多地方创建一个函数:
function get(obj, props) {
return props.reduce(function(x, p) { return x && x[p] ? x[p] : null }, obj)
}
if (get(arr, [a, b, c])) ...
使用对象和数组:
var obj = [0, {a: [0, 'value', 2]}, 2]
get(obj, [1, 'a', 1]) //=> 'value'
get(obj, [1, 'a', 8]) //=> null
答案 2 :(得分:0)
对于稀疏数组检查,仅检查undefined
项是不够的。但是,您可以使用in
运算符进行类似
(a,b,c) in arr
var a = [];
a[10] = 1;
b = 10;
console.log(1 in a)
console.log((1,2,3) in a)
console.log(b in a)