frequent
frequent

Reputation: 28493

javascript - iterate through array until first occurence of specified element is found?

I have an array ["#page1", "yield", "yield", "yield", "#page2", "yield", "#page3" ]

I want to iterate through the array top-down, starting at the last yield and looking for the next occurence of an element not being yield (which is #page2).

This is what I have:

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'm starting at i=5 (6 iterations) and checking if the element is not yield. However, the current way runs through all 6 iterations, so I end up with the page#1 instead of the #page2. I don't know how I can stop the iterations.

Using return did not work, what other means are there? Is lastIndexOf something I could use?

Thanks for help!

Upvotes: 4

Views: 8377

Answers (4)

jAndy
jAndy

Reputation: 235972

Just because noone mentioned it so far, you can also go with ES5 .some() for that.

Looks like:

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);

Upvotes: 6

TeckniX
TeckniX

Reputation: 673

Have a look at the 'break' operation with labels, so that you can break out where ever you'd like.

Javascript Loop Control with Break and Continue

Upvotes: 0

ipr101
ipr101

Reputation: 24236

Try '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;
          }
    }

Upvotes: 0

Jamiec
Jamiec

Reputation: 136084

you're looking for the breaktutorial keyword, which breaks out of a loop.

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

Upvotes: 4

Related Questions