【问题标题】:How can I check that a specific key in an array is empty at every index?如何检查数组中的特定键在每个索引处是否为空?
【发布时间】:2021-10-06 21:01:31
【问题描述】:

所以我有一个要迭代的对象数组,在每次迭代时我都需要检查名为 blocks 的键是否有长度。

如果所有blocks 键都是空的(长度=== 0)那么我需要做一个操作,否则不要。得到它?如果只有一个blocks 键有length > 0,则应避免该操作。

    for (let i = 0; i < blockColumns.length; i++) {
      if (!blockColumns[i].blocks.length) {
        // TRIGGER OPERATION
      }
    }

在上面的代码中,问题是当至少一个blocks 键没有长度时会触发操作,我不需要这个。仅当所有blocks 键都具有length === 0 时才应触发该操作。

【问题讨论】:

    标签: javascript arrays ecmascript-6


    【解决方案1】:

    使用 Array.every() 检查每个项目的长度是否为 0 (!0 === true)。如果所有项目的长度为 0,则每个都将返回 true。如果遇到false(即长度> 0),every 将立即返回false

    const allEmpty = blockColumns.every(o => !o.blocks.length)
    
    if(allEmpty) doSomething()
    

    【讨论】:

      【解决方案2】:

      这听起来像是 Array.prototype.every 有用的东西:

      if (blockColumns.every((el) => el?.blocks?.length === 0)) {
          // Do your operation
      }
      

      我在这里使用了optional chaining,因为我不确定是否存在元素没有blocks 属性的情况,或者该属性可能没有length 属性。但根据您对数据结构的信心程度,您可能不需要这样做。

      【讨论】:

        【解决方案3】:

        那么你就可以了

        x = 0
        for (let i = 0; i < blockColumns.length; i++) {
              if (!blockColumns[i].blocks.length > 0) {
                x+=1;
              }
            }
           if(x == blockColumns.length){
             //do something
            }
        

        这是一种非常简单的方法,我认为它根本没有效率,但它现在可以完成工作:D

        【讨论】:

          【解决方案4】:
             let doOperation = true;
             for (let i = 0; i < blockColumns.length; i++) {
                 if (blockColumns[i].blocks.length > 0) {
                     doOperation = false
                 }
             }
             if (doOperation) {
                 //Some operation
             }
          

          不确定我是否跟随,但这会起作用吗?

          【讨论】:

          • 这不起作用。请记住,如果 ALL BLOCKS 为空,则应触发操作。
          • @Reacting 这就是这段代码的作用?如果任何块非空,doOperation 将变为 false
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-04-04
          • 1970-01-01
          • 1970-01-01
          • 2017-07-07
          • 1970-01-01
          相关资源
          最近更新 更多