2017-06-16 106 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));