2017-01-09 4 views
-1

私はほんの数日前にコードを書くことを始めました。私は最初のプログラムでほぼ完成しました。しかし、私は最後に問題に遭遇しました。自分が何が間違っているのか分かりません。Javascript - この関数とループで何が問題になっていますか?

プログラムは、私が日の曜日と時刻で日付の束を並べ替えるのを助けるはずです。日付は「YYMMDD-」と書かれ、その時刻(時間のみ)、例えば、 "170109-06"。

配列(時間)で並べ替える日付があり、次の関数とループは、特定の年と一致しないすべての日付を削除することになっています。

変数明確化:。

時間 - 日付と時間(すべて同じヶ月が異なる年からなる配列(例えば、[ "161102から03"、 "151127から11"]

yearDate - 配列に滞在するつもりだ日付の最初の4つの数字

function checkDate (date) { 
    var yearMonth = date.slice(0, 4); 
    var index = time.indexOf(date) 
    if (yearMonth != yearDate) { 
     time.splice(index, index + 1); 
    } 
    else { 
    } 
} 

for (var i = 0; i <= time.length; i++) { 
    checkDate(time[i]); 
} 

は、このコードは時折動作しているようですが、彼らがそのように、削除されることになっているとき、時々、配列からいくつかの文字列がそこに滞在ザールeは明らかにコードに間違っています。

私が何を意味するのか理解できれば幸いです。私はこの投稿が羊毛のようなものに終わったことを認識しています。

+0

は、あなたがそれを自分でデバッグしようとしたがありますか? –

+0

[ツアー](https://stackoverflow.com/tour)、[How To Ask](https://stackoverflow.com/help/how-to-ask)を読んで[MCVE](https ://stackoverflow.com/help/mcve)。あなたは[Rubber Duck](https://ericlippert.com/2014/03/05/how-to-debug-small-programs/)に相談しましたか? –

答えて

1

標準的な誤り。あなたはそれを反復処理しながら配列から項目を削除しています。アイテムが削除されるたびに、イテレータをインクリメントすると、削除されたアイテムの隣の次のエレメントにジャンプします。

は後方移動します:

for (var i = time.length - 1; i >= 0; i--) { 
    checkDate(time[i]); 
} 
関連する問題