【问题标题】:javascript - iterate through array until first occurence of specified element is found?javascript - 遍历数组直到找到指定元素的第一次出现?
【发布时间】:2011-12-14 04:17:36
【问题描述】:

我有一个数组["#page1", "yield", "yield", "yield", "#page2", "yield", "#page3" ]

我想从上到下遍历数组,从最后一个 yield 开始,并寻找下一个不是 yield 的元素(即 #page2)。

这就是我所拥有的:

var longest = ["#page1", "yield", "yield", "yield", "#page2", "yield", "#page3" ],
    longestLen = longest.length;
for (i = longestLen-2; i>=0; i--) { 
     if ( longest[i] != "yield") {
          var gotoPage = longest[i];
          }
    }

我从 i=5(6 次迭代)开始检查元素是否不是 yield。然而,当前的方式贯穿了所有 6 次迭代,所以我最终得到了 page#1 而不是 #page2。我不知道如何停止迭代。

使用return没用,还有什么其他方法? lastIndexOf 是我可以使用的吗?

感谢您的帮助!

【问题讨论】:

标签: javascript jquery arrays loops


【解决方案1】:

因为到目前为止没有人提到它,所以你也可以使用 ES5 .some()

看起来像:

var longest = ["#page1", "yield", "yield", "yield", "#page2", "yield", "#page3" ],
    gotoPage;

longest.reverse().slice(1).some(function( elem ) {
    return (gotoPage = elem) !== "yield";
});

alert('goto page: ' + gotoPage);

【讨论】:

  • 不错的解决方案,但这不是从最后一个yield 开始的吗?
  • @pimvdb: 因为我在.some() 之前打电话给.reverse(),它会的!
  • 但是如果我运行这段代码,我会为gotoPage 获得#page3,因为.some 已经停在#page3。除非我弄错了,否则 OP 想从最后一个 yield 开始。
  • 正确。我无法从最后一个条目开始,因为那是我当前所在的页面(在 panel-x 上)。当相应面板 (y) 上的页面更改时,“产量”将添加到数组中。为了向后转换到正确的页面,我需要在当前活动页面(= #page3)的面板上找到最后一个非“yield”条目。 break 对我来说很好,虽然我也会记住这一点
  • 好吧,我没有意识到这一点。如果它始终 100% 确定您需要跳过最后一个条目,我使用 .slice(1) 扩展了 sn-p,这几乎可以完成这项工作。
【解决方案2】:

看看带有标签的“中断”操作,这样你就可以在任何你想要的地方中断。

Javascript Loop Control with Break and Continue

【讨论】:

    【解决方案3】:

    试试 'break' -

    var longest = ["#page1", "yield", "yield", "yield", "#page2", "yield", "#page3" ],
        longestLen = longest.length;
    for (i = longestLen-2; i>=0; i--) { 
         if ( longest[i] != "yield") {
              var gotoPage = longest[i];
              break;
              }
        }
    

    【讨论】:

      【解决方案4】:

      您正在寻找 breaktutorial 关键字,它会跳出循环。

      if ( longest[i] != "yield") {
          var gotoPage = longest[i];
          break; // wont iterate any further in the for(...) loop
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-01
        • 1970-01-01
        • 1970-01-01
        • 2020-06-10
        相关资源
        最近更新 更多