如何检查数组是不是是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 中的一个数组?

如何检查变量是不是是javascript中的类型化数组?

如何检查数组是不是包含 JavaScript 中的值?

如何检查数组是不是包含 JavaScript 中的值?

如何根据 JavaScript 中的值检查对象是不是在数组中?

如何检查一个字符串数组是不是包含 JavaScript 中的一个字符串? [复制]