javascript - перебирать массив, пока не будет найден первый экземпляр указанного элемента? - PullRequest
2 голосов
/ 24 октября 2011

У меня есть массив ["#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 что-то, что я мог бы использовать?

Спасибо за помощь!

Ответы [ 4 ]

4 голосов
/ 24 октября 2011

вы ищете ключевое слово break , которое выходит из цикла.

if ( longest[i] != "yield") {
    var gotoPage = longest[i];
    break; // wont iterate any further in the for(...) loop
}
3 голосов
/ 24 октября 2011

Только потому, что никто не упомянул об этом, вы также можете использовать 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);
0 голосов
/ 24 октября 2011

Посмотрите на операцию 'break' с метками, чтобы вы могли разорвать ее там, где захотите.

Управление циклом Javascript с разрывом и продолжением

0 голосов
/ 24 октября 2011

Попробуйте ' 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;
          }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...