2017-05-10 8 views
1

私は最近この問題に遭遇し、どこでも良い答えを見つけることができません。Javascript:アレイの最後に1回ループを再開

私は一度ループを再開したいが、一度は終わりに達するが、有限の時間だけループする。

この特定のコンテキストでは、週の配列があり、今日の曜日から次の7日間の日の名前をDate.getDay()を使用して表示したい場合は、0(日曜日)から値を返します。 〜6(土曜日)。私は現在のループのために1つをスキップし続ける以外は、次の7日間の名前の配列を作成することができます。ここに私がこれまで持っているものがあります。

私の予想される出力は、次のとおりです。

['friday', 'saturday', 'sunday', 'monday', 'tuesday', 'wednesday', 'thursday']

const dayNames = [ 
    "Monday", 
    "Tuesday", 
    "Wednesday", 
    "Thursday", 
    "Friday", 
    "Saturday", 
    "Sunday" 
]; 
const rawDate = new Date(); 
let dayNum = rawDate.getDay(); 
const week = []; 
for (let i = 0; i < 6; i++) { 
    if (dayNum + 1 === 7) { 
    dayNum = 0; 
    for (j = 0; j < todayNum; j++) { 
     week.push(dayNames[dayNum]) 
     dayNum++ 
    } 
    week.push(dayNames[dayNum]); 
    dayNum++ 
    } else { 
    week.push(dayNames[dayNum + 1]); 
    dayNum++; 
    } 

} 
console.log(week); 

は私がいることがわかります私の私「のために」に1がスキップされた理由ですが、私は私の頭を取得するように見えることができない「場合」どのように修正するかについて。ありがとうございました

+0

予期した結果が得られる特定の日付を使用するようにサンプルを更新することをお勧めします。そうすれば、誰かが明日の質問を見ると、彼らはまだ期待される結果を得るでしょう。 'const rawDate = new Date(2017、4、10);' ... –

+0

あなたが完了したforloopの数を追跡するためにあなたのループの外にvarを宣言したいと思うでしょう。その後、あなたのループでは、最終的なループインターラクションと同じになったら、インターレーターを0にリセットします。インタレータをリセットするときに、forループを実行した回数の合計をトラッキングします。あなたの終了条件(totalForLoops == numberOfTimeYouWantItToRun)をテストし、その真のときに戻ります。 – Ken

+0

私はあなたがマイクと言っていることを見ます。また、@ニーナ、それは動作しますが、それは完全な7日間を表示していない...これは私の問題です。 – archae0pteryx

答えて

3

正しいインデックスにはremainder operator %を使用できます。

const dayNames = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"]; 
 
const rawDate = new Date(); 
 
let dayNum = rawDate.getDay(); 
 
const week = []; 
 
for (let i = 0; i < 6; i++) { 
 
    week.push(dayNames[(dayNum + i) % dayNames.length]); 
 
} 
 
console.log(week);

+0

ありがとう@Nina。これは私がループ '' '<7''を調整すると完璧に動作します – archae0pteryx

+0

私は(5分) – archae0pteryx

1

あなただけの周りのあなたの配列インデックスをラップする剰余演算子を使用し、ループを再起動する必要はありません。

dayNamesの順番を修正する必要がありますので、getDay()が返されます。そして、ループは7回実行する必要があります。週全体を取得するには6回だけではありません。

const dayNames = [ 
 
    "Sunday", 
 
    "Monday", 
 
    "Tuesday", 
 
    "Wednesday", 
 
    "Thursday", 
 
    "Friday", 
 
    "Saturday" 
 
]; 
 
const rawDate = new Date(); 
 
const dayNum = rawDate.getDay(); 
 
const week = []; 
 
for (let i = dayNum; i < dayNum + 7; i++) { 
 
    week.push(dayNames[i % 7]); 
 
} 
 
console.log(week);

0

%演算子を使ってみて、ただ一つのループ:

const dayNames = [ 
 
    "Sunday", 
 
    "Monday", 
 
    "Tuesday", 
 
    "Wednesday", 
 
    "Thursday", 
 
    "Friday", 
 
    "Saturday" 
 
]; 
 

 
const rawDate = new Date(); 
 
let dayNum = rawDate.getDay(); 
 
const week = []; 
 

 
for (let i = 0; i < 7; i++) { 
 
    week.push(dayNames[dayNum++ % 7]); 
 
} 
 

 
console.log(week);

また、週のゼロ番目の日は、Date.prototype.getDateによると日曜日。

0

したい場合は、[明日、明日+ 1、...、明日+ 6]:あなたが、その後返す剰余演算子%を使用して、全体次の7日間を取得するi < 7が必要

for (let i = 1; i <= 7; i++) { 
    week.push(dayNames[(dayNum + i) % 7]); 
} 
0

除算の残りと1つのforループはあなたに望ましい結果を与えます。

const dayNames = [ 
    "Monday", 
    "Tuesday", 
    "Wednesday", 
    "Thursday", 
    "Friday", 
    "Saturday", 
    "Sunday" 
]; 
const rawDate = new Date(); 
let dayNum = rawDate.getDay(); 
const week = []; 
for (let i = 0; i < 7; i++) { 
    week.push(dayNames[(dayNum + i) % dayNames.length]); 
} 
console.log(week); 
関連する問題