代码之家  ›  专栏  ›  技术社区  ›  movac

为什么这个for循环永远不会返回true?复制

  •  0
  • movac  · 技术社区  · 6 月前

    我有一个VueJS计算函数,我想用它来控制某个东西是否显示在页面上。我遇到了问题,我希望它能在 return 但它仍在继续,永远无法维持 return true

    vue页面上的HTML元素:

    <div v-if="infoExists">Some Stuff Here</div>
    

    我有一个功能 infoExists 那个

    • 循环通过父对象中的所有特定对象集
    • 检查对象中是否存在某些信息(最终它应该测试它是否===某个值,但即使它刚刚存在,我也有问题,所以我会先解决这个问题)

    预期功能:

    • 如果对象中的任何一项具有 item.info
    • 如果具有的单个项停止迭代for循环 item.info 被找到,并简单地返回 true 在页面加载期间

    实际不需要的行为:

    • 正确地遍历集合中的所有项
    • 当项目具有 item.info 正确地
    • 在其余项目中继续迭代
    • 即使对象中的每个项都有 item.info
    • 如果我设置 return false 在循环之外的末尾,它总是返回false
        infoExists() {
          console.log('infoExists') // always prints correctly
    
          Object.values(this.set.items).forEach( (item) => {
            console.log(item) // logs correct item, keeps printing items even after an item containing item.info is passed previously
            if (item.info) {
              console.log('has info') // correctly logs when has info
              return true; // expect for the loop to break here and for the function to return true
            }
          } );
    
           // return false; // if this is uncommented, it always returns false
        },
    

    我如何简单地做到:

    • 检查是否有 item item.info
    • 如果是,返回 真的
    • 如果没有 项目 item.info 回来 false
    1 回复  |  直到 6 月前
        1
  •  1
  •   Unmitigated    6 月前

    这里合适的方法是 Array#some .

    Array实例的some()方法测试数组中是否至少有一个元素通过了所提供函数实现的测试。如果在数组中找到提供的函数返回true的元素,则返回true;否则返回false。它不会修改数组。

    return Object.values(this.set.items).some(item => item.info);