2017-06-16 118 views
0

阵列,我node.js 6.10的应用程序,我想在我的阵列,以确定是这样的:如何检查是否数组是空数组中的Javascript

[ 
    [ 
     [] 
    ], 
    [] 
] 

这种嵌套可以去到N个级别,可以在任何级别的数组中具有元素。我怎样才能做到这一点?谢谢

P.S.我知道我可以使用n级循环做到这一点,但想知道更优化的解决方案。

+0

创建一个递归函数,也许? –

+3

'arr.toString()。replace(/,/ g,'')=== true' – user7929528

+0

^^^如果数组是整串逗号 – user7929528

回答

5

的一行代码:

let isEmpty = a => Array.isArray(a) && a.every(isEmpty); 
 

 
// 
 

 
let zz = [ 
 
    [ 
 
     [] 
 
    ], 
 
    [], 
 
    [[[[[[]]]]]] 
 
] 
 

 

 
console.log(isEmpty(zz))

如果你想知道如何工作的,请记住,约一空集的任何说法是正确的(” vacuous truth"),因此a.every(isEmpty)是真的用于空阵列和仅包含空阵列的阵列。

+0

更简单的使用lodash :) – Artem

+0

我认为试着做一些比这更好的事情只是浪费时间:) – Redu

0

是,

您所需要的只是编写递归函数,即在其路上检查array.length属性。

类似的东西:

function isEmpty(arr) { 
let result = true; 

for (let el of arr) { 
    if (Array.isArray(el)) { 
     result = isEmpty(el); 
    } else { 
     return false; 
    } 
} 

return result; 

}

您可以考虑使用lodash:https://lodash.com/docs/#flattenDeep

-1

利用concat另一种紧凑的解决方案:

[].concat.apply([], [[], [], []]).length; // 0 
+0

它不适用于嵌套数组,如:'[[],[],[[]]]' – Artem

+0

糟糕,你是对的 –

0

你可以这样做:

var arr = [[[]],[]], 
 
    isEmpty = a => a.toString().replace(/,/g, '') === ''; 
 

 
console.log(isEmpty(arr));