如何检查数组是不是是Javascript中的空数组数组
Posted
技术标签:
【中文标题】如何检查数组是不是是Javascript中的空数组数组【英文标题】:How to check if an Array is an Array of empty Arrays in Javascript如何检查数组是否是Javascript中的空数组数组 【发布时间】:2017-11-19 01:44:14 【问题描述】:在我的node.js 6.10
应用程序中,我试图在我的数组中识别如下:
[
[
[]
],
[]
]
这种嵌套可以达到 n 级,并且可以在任何级别的数组中包含元素。我怎样才能做到这一点?谢谢
P.S.我知道我可以使用 n 级 for 循环来做到这一点,但想知道更优化的解决方案。
【问题讨论】:
创建一个递归函数,也许吧?arr.toString().replace(/,/g,'') === true
^^^ 如果数组是完整的逗号字符串,这将失败
arr.toString().replace(/,/g, '') === '';
【参考方案1】:
单行:
let isEmpty = a => Array.isArray(a) && a.every(isEmpty);
//
let zz = [
[
[]
],
[],
[[[[[[]]]]]]
]
console.log(isEmpty(zz))
如果您想知道这是如何工作的,请记住任何关于空集的陈述都是正确的 ("vacuous truth"),因此 a.every(isEmpty)
对于空数组和仅包含空数组的数组都是正确的。
【讨论】:
使用 lodash 更简单:) 我认为尝试做比这更好的事情只是浪费时间:)【参考方案2】:是的,
您只需要编写递归函数,它会在途中检查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
【讨论】:
【参考方案3】:另一个使用concat
的紧凑型解决方案:
[].concat.apply([], [[], [], []]).length; // 0
【讨论】:
在嵌套数组的情况下不起作用,例如:[[], [], [[]]]
【参考方案4】:
你可以这样做:
const arr = [[[]],[]]
const isEmpty = a => a.toString().replace(/,/g, '') === ''
console.log(isEmpty(arr))
【讨论】:
以上是关于如何检查数组是不是是Javascript中的空数组数组的主要内容,如果未能解决你的问题,请参考以下文章
如何检查一个变量是不是是 JavaScript 中的一个数组?