webForumDet fria alternativet

Problem med loop

JavaScript

6 svar · 386 visningar · startad av stattin

Medlem sedan jan. 2005713 inlägg
Frågan#1

Hej!

Egentligen funkar det som det ska men..


for (i=0;i<50;i++)
{for (nr=315;nr<501;nr++)
{if(document.images[i].src.indexOf("/"+nr+".JPG") != -1)
{ break; }}
if(document.images[i].src.indexOf("/"+nr+".JPG") != -1)
{var s=nr; break; }}

Jag borde ju inte behöva köra if satsen två gånger men det var det ända sättet jag fick till det på.

Medlem sedan aug. 20039 340 inlägg
#2
for (i=0;i<50;i++){
  for (nr=315;nr<501;nr++){
    if(document.images[i].src.indexOf("/"+nr+".JPG") != -1){
      break;
    }
  }
  if(document.images[i].src.indexOf("/"+nr+".JPG") != -1){
    var s=nr;
    break;
  }
}

Lite tabulering hjälper till att klara upp situationen...
Den andra if-satsen får det värde som blir över efter for-loopen, 501 i detta fall. Så nr är alltid 501 när den andra if-satsen körs. Är det så du vill att ska vara?

Medlem sedan jan. 2005713 inlägg
#3

Alting fungerar som jag vill, det enda jag undrar över är varför man måste ha två if satser som gör samma sak två gånger, kan man inte ta bort en?

Medlem sedan dec. 20025 483 inlägg
#4

Semantiskt är det inte korrekt, eftersom du definierar en lokal variabel i if-satsen utan att använda den (möjligtvis försöker du använda 's' utanför loopen, men det är inte riktigt).

var s = 0;
for (i=0;i<50;i++){
  for (nr=315;nr<=501;nr++){ [b]// '<='[/b]
    if(document.images[i].src.indexOf("/"+nr+".JPG") != -1){
      s = nr;
      break;
    }
  } 
}

if (s != 0){
  // använd 's'
}
Medlem sedan jan. 2005713 inlägg
#5

Njaa.. document.images[].src = null eller inget objekt står det då bara när jag provkör peters variant.

Har för mig att stötte på det problemet förut och enda lösningen vart två if satser.

Medlem sedan dec. 20025 483 inlägg
#6

Då har du färre än 50 bilder på sidan. Istället för '50' nedan kan du använda document.images.length.

var s = 0;
outer:
for (i=0;i<document.images.length;i++){
  for (nr=315;nr<=501;nr++){ // '<='
    if(document.images[i].src.indexOf("/"+nr+".JPG") != -1){
      s = nr;
      break outer;
    }
  } 
}
Medlem sedan jan. 2005713 inlägg
#7

Att jag inte tänkte på det.. jag skrev 50 bara för att garantera att få med alla bilder.

Då har man lärt sig vågot nytt, tack så mycket.. :bire

311 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
174 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
172 ms — ändringar (db)