【问题标题】: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, '') === '';

标签: javascript arrays node.js multidimensional-array


【解决方案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))

    【讨论】:

      猜你喜欢
      • 2022-01-25
      • 1970-01-01
      • 1970-01-01
      • 2011-01-23
      • 1970-01-01
      • 2017-09-13
      • 2021-08-19
      相关资源
      最近更新 更多