2017-02-02 8 views
-3

私は配列を通過するために、set interval関数を使うこのコードを作った。if文なしでこのコードを実行するより効率的な方法はありますか?

<img src="red.jpg" id="traffic" width="155" height="198"> 

<script> 

var imgarray = ["red.jpg", "redandorange.jpg", "green.jpg", "orange.jpg"] 
document.getElementById("traffic").innerHTML = traffic; 

setInterval(function() { 
ChangeLights() ; 
}, 2000) ; 

function ChangeLights() { 
if (traffic.src.match(imgarray[0])){ 
traffic.src = imgarray[1]; 
}else if (traffic.src.match(imgarray[1])){ 
traffic.src = imgarray[2]; 
}else if (traffic.src.match(imgarray[2])){ 
traffic.src = imgarray[3]; 
}else if (traffic.src.match(imgarray[3])){ 
traffic.src = imgarray[0]; 
}} 

if文のすべてを除いて行う方法はありますか?

+0

に沸きます。 – khelwood

+0

'if'ステートメントと配列アクセスが' O(1) 'なので、この関数はパフォーマンスが良いです。 –

答えて

4

あなたはこれまであなたChangeLights()機能を置き換えることができます。

function ChangeLights() { 
    traffic.src = imgArray[imgArray.indexOf(trafficSrc) + 1 % imgArray.length]; 
} 
0

はい、あります。

何かのように:

for(var i = 0; i<imgarray.length; i++){ 
    if(traffic.src.match(imgarray[i])) { 
     if(i+1 === traffic.length) { 
     traffic.src = imgarray[0]; 
     } else { 
      traffic.src = imgarray[i+1]; 
     } 
     break; 
    } 
} 
+0

あなたはそれを悪化させたと思います。 – Robert

+1

これは動作しません。あなたはちょうど同じイメージを取るでしょう – Weedoze

+0

ええ、あなたは正しい...私の悪いです!私は最初に問題を理解していませんでした:\ – sexta13

1
var idx = 0; 

function ChangeLights() { 
    idx++; 
    if (idx > 2) 
     idx = 0; 
    traffic.src = imgarray[idx]; 
} 
1

あなたのコードは、Javascriptの質問 `java`にタグを付けないでください。この

var i = 0; 

setInterval(ChangeLights, 2000); 

function ChangeLights() { 
    i = i < imgarray.length - 1 ? i + 1 : 0; 
    traffic.src = imgarray[i]; 

} 
関連する問題