【问题标题】:Check inside a loop that array has next element in Javascript/QML在循环内检查数组在 Javascript/QML 中有下一个元素
【发布时间】:2015-08-23 15:19:10
【问题描述】:

我有一个数组items。我需要确保在循环的当前迭代中我可以安全地调用数组的下一项

for(var i = 0; i < items.length; ++i) {

  // do some stuff with current index e.g....
  item = items[i];


   // then do something with item @ i+1
   if(items[i+1]) {
      //do stuff 
   }

}

这是如何完成的,或者如果不是如何/什么是更好的方法?

附:我不想做绑定检查

【问题讨论】:

  • 最好的方法是将i &lt; items.length 替换为i &lt; items.length-1。然后,您可以在循环中安全地调用items[i+1]
  • @blex 这应该是一个答案
  • @meagar 我不想将其发布为答案,但如果您认为值得,请这样做;)
  • @blex 谢谢这是一个巧妙的技巧......但是if(items[i+1]) 可以被认为是安全的吗?
  • if(items[i+1]) 不是很安全,例如,如果您的数组包含任何 falsey 值,例如 false""0(您的条件不会被满足,if 语句将不会被执行)。检查索引i+1元素的更好方法是执行if(i&lt;items.length-1)

标签: javascript qml


【解决方案1】:

如果你想遍历除最后一个元素之外的所有元素(后面没有元素),你应该按照建议进行:

for(var i = 0; i < items.length-1; ++i) {
    // items[i+1] will always exist inside this loop
}

但是,如果您想遍历每个元素(甚至是最后一个元素),并且如果后面有一个元素,则只需添加一个条件,只需将相同的条件移入循环中即可:

for(var i = 0; i < items.length; ++i) {
    // do stuff on every element
    if(i < items.length-1){
        // items[i+1] will always exist inside this condition
    }
}

如果下一个元素包含类似false0"" 的虚假值(空字符串返回false),if(items[i+1]) 将返回 false(并且不执行条件)。

【讨论】:

    【解决方案2】:

    检查变量i 的值并确保它小于items.length-1,以便安全访问items[i+1]

    for(var i = 0; i < items.length-1; ++i) {
    
      if(items[i+1]) {
        //do stuff 
      }
    
    }
    

    【讨论】:

    • 实际上,我需要打破 if 和 else 之间的循环,您的回答很有帮助,因为不能像老式循环 for 那样以 goog 方式打破 array.forEach 跨度>
    【解决方案3】:

    删除for循环并使用array#forEach,然后简单地检查下一个值是否存在:

    items.forEach(function (item, index) {
    
      if (!items[index + 1]) return;
    
      // do something with item and items[index + 1]
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-01
      • 2013-01-01
      • 1970-01-01
      • 2021-02-18
      • 2011-09-11
      • 1970-01-01
      • 2020-04-18
      相关资源
      最近更新 更多