确定对象内的嵌套数组是否具有值

时间:2018-10-14 10:09:16

标签: javascript arrays ecmascript-6

我有一个看起来像这样的对象:

 steps: {
        '36793745-4c52-42d2-91a5-dcdc9de2e8fa': [],
        'b23d8770-806f-44a9-aa2e-a21dd68f7977': [],
        '33571d58-b833-4a7d-a1a1-ec96366cb74a': [],
        'b1499917-7f82-49e5-9708-6237340a9610': []
      }

该对象中的每个数组都可以是字符串数组。

我想检查这些数组中是否有任何一个,如果有,我想返回true

我不在乎以后再检查,只要返回true,我就会感到高兴。

我尝试了类似Object.keys(steps).map(step => steps[step].length > 0)的操作,但这会返回一个真或假[false, false, false, false]的数组

然后我尝试了Object.keys(steps).filter(step => steps[step].length > 0),但这会返回确实具有值的项目键的数组。

我知道这时我可以简单地检查结果的长度,但是我想知道是否有更好的方法来实现这一目标。

该对象的大小可能会大大增加,因此我希望在得到true的情况下尽快退出市场

2 个答案:

答案 0 :(得分:2)

您可以使用这些值并检查数组的长度。

var hasItems = Object.values(steps).some(array => array.length);

答案 1 :(得分:0)

使用some

它可以用来检查数组中的至少一个元素是否符合条件。像Array.Filter一样,它接受一个测试函数,在其中循环遍历源数组的元素。

如果任何一个元素通过测试条件,则返回true。如果所有元素在测试功能上均失败,则返回false。一旦其中一个元素通过测试功能,就会使环路短路。

const stepHasProp = Object.values(steps).some(array => array.length)