在JavaScript中测试稀疏数组元素的存在?

时间:2017-08-19 15:38:14

标签: javascript arrays multidimensional-array

在几层深度的结构中测试数组元素是否存在的最佳方法是什么?例如:

if (typeof arr[a][b][c] === 'undefined') { ...do something... }

如果[a]或[b]不存在,我们将无法测试[c]。

是否有下划线或lodash功能来处理这个问题?

3 个答案:

答案 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;
&#13;
&#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)