在我的node.js 6.10
应用程序中,我试图在我的数组中识别如下所示:
[
[
[]
],
[]
]
此嵌套可以进入 n 级,并且可以在任何级别的数组中具有元素。我该怎么做?谢谢
附言我知道我可以使用 n 级 for 循环来做到这一点,但想知道更优化的解决方案。
单行:
let isEmpty = a => Array.isArray(a) && a.every(isEmpty);
//
let zz = [
[
[]
],
[],
[[[[[[]]]]]]
]
console.log(isEmpty(zz))
如果你想知道这是如何工作的,请记住,任何关于空集的陈述都是真的("空洞的真理"(,因此a.every(isEmpty)
对于空数组和只包含空数组的数组都是真的。
你可以做:
const arr = [[[]],[]]
const isEmpty = a => a.toString().replace(/,/g, '') === ''
console.log(isEmpty(arr))
是的,
您所需要的只是编写递归函数,该函数在途中检查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
另一个利用concat
的紧凑解决方案:
[].concat.apply([], [[], [], []]).length; // 0