2017-05-18 8 views
1

配列、ループ、if文をどのように組み合わせるかを理解しようとしています。私は平日の配列を作成しました。特定の日に特定の運動を割り当てる必要があることを指定したいと思います。私は割り当てられた日と運動をプリントアウトしたいと思います。以下のコードからわかるように、weekday.push()メソッドを使用すると、別の日に水泳またはウェイトトレーニングが割り当てられ、ヨガはまったく追加されず、14個の値が作成されます。これにアプローチする方法を教えてください。ありがとう!あなたのコードをModiefied配列、ループ、if文の組み合わせ

var weekday = ['Sun', 'Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat']; 
 
var workOut = []; 
 

 
function myExercise() { 
 
    for (var i = 0; i < weekday.length; i++) { 
 
    if (weekday == 'Wed' || 'Mon' || 'Fri') { 
 
     workOut.push('Swimming'); 
 
    } 
 
    if (weekday == 'Tue' || 'Thur' || 'Sat') { 
 
     workOut.push('weight training'); 
 
    } else { 
 
     workOut.push('Yoga' + 'or' + 'power walking'); 
 
    } 
 
    } 
 
} 
 

 
myExercise(); 
 
console.log(workOut);

+0

は、あなたの質問に答えるが、FYI代わりに、 'if'あなたは[' switch'](httpsを使用することができますではない://developer.mozillaを。 org/en-US/docs/Web/JavaScript/Reference/Statements/switch) – George

+0

ここでスイッチを確実に使用してください – Michiel

+0

スイッチがこの場合に役立つかどうか不明です。あなたは毎日 'workOut.push()'をハードコードするか、奇妙に(Mon、Wed、Fri、Tue、Thur、Sat)ケースをオーバラップさせる必要があります。 – NickSlash

答えて

-1

前の回答で声明を切り替えるが、私は同様に、このいずれかを含むていますが、すでに存在しています。それはしかし、初心者のため理解しやすく、乾燥していないかもしれません。

var weekday = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']; 
var workOut = []; 

function myExercise() {  
    for (var i = 0; i < weekday.length; i++) { 
     switch(weekday[i]) { 
      case 'Sun': 
       workOut.push('Yoga' + 'or' + 'power walking'); 
       break; 
      case 'Mon': 
       workOut.push('Swimming'); 
       break; 
      case 'Tue': 
       workOut.push('weight training'); 
       break; 
      case 'Wed': 
       workOut.push('Swimming'); 
       break; 
      case 'Thu': 
       workOut.push('weight training'); 
       break; 
      case 'Fri': 
       workOut.push('Swimming'); 
       break; 
      case 'Sat': 
       workOut.push('weight training'); 
       break; 
       default: 
       workOut.push('Sleep!!'); 
     } 
    } 
} 

myExercise(); 
console.log(workOut); 
+0

私はあなたが常に同じ結果を持つケースをグループ化すべきだと思います。同意しないのですか? – Michiel

+0

間違いなく私は同意します。しかし、私が言及したように、これは初心者にとって理解しやすいかもしれません。 –

1

、スペルミスや条件があったが

var weekday = ['Sun', 'Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat']; 
 
var workOut = []; 
 

 
function myExercise() { 
 
    for (var i = 0; i < weekday.length; i++) { 
 
    console.log(weekday[i]) 
 
    if (weekday[i] == 'Wed' || weekday[i] == 'Mon' || weekday[i] == 'Fri') { 
 
     workOut.push('Swimming'); 
 
    } 
 
    else{ 
 
    if (weekday[i] == 'Tues' || weekday[i] == 'Thur' || weekday[i] == 'Sat') { 
 
     workOut.push('weight training'); 
 
    } else { 
 
     workOut.push('Yoga' + 'or' + 'power walking'); 
 
    } 
 
    } 
 
    } 
 
} 
 

 
myExercise(); 
 
console.log(workOut); 
 
VM280:18

+0

ありがとう@Knitesh!これも機能します。 – Jindi

4

あなたがしようとしたように残念ながら、あなたは短いカットを使用することはできませんが重なりましたあなたのif節で。また、イテレータを忘れた[i]。あなたがIE(includesのサポートはありません)をサポートしたい場合は、代わりにindexOfで仕事ができる

if (['Wed','Mon','Fri'].includes(weekday[i])) 

:通常

if (weekday[i] == 'Wed' || weekday[i] == 'Mon' || weekday[i] == 'Fri') 

のほかに、あなたはまた、次の形式を使用することができます。

これは、多くの値をチェックしたいときに便利です。

注:私はまた、else if(14のエントリの理由である)にifを変更し、Array.prototype.map関数を使用しました。また、スコープに属していないオブジェクトを操作するのは悪い習慣です(ワークアウトはグローバルスコープですが、myExercise関数で操作されます)。目的の結果を返してから単純な割り当てを行う方がよいでしょう。

var weekday = ['Sun', 'Mon', 'Tue', 'Wed', 'Thur', 'Fri', 'Sat']; 
 
var workOut = []; 
 

 
function myExercise() { 
 

 
    return weekday.map(function(day){ 
 
     var workout; 
 
     if (['Mon','Wed','Fri'].includes(day)){ 
 
     workout = "Swimming"; 
 
     } else if (['Tue','Thur','Sat'].includes(day)){ 
 
     workout = "Weight training"; 
 
     } else { 
 
     workout = 'Yoga or power walking'; 
 
     } 
 
     return workout; 
 
    }); 
 
} 
 

 
workOut = myExercise(); 
 
console.log(workOut);

+0

'includes()'は広くサポートされていますか? –

+1

ここに:https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Array/includes?v=control#Browser_compatibility – rishipuri

+0

@IvankaTodorova IEユーザーのための代替案を追加しました;) – Christoph

1

var weekdays = ['Sun', 'Mon', 'Tues', 'Wed', 'Thur', 'Fri', 'Sat']; 
 
var workouts = weekdays.map(day => { 
 
    switch (day) { 
 
    case 'Wed': 
 
    case 'Mon': 
 
    case 'Fri': 
 
     return 'Swimming'; 
 
     break; 
 
    case 'Tues': 
 
    case 'Thur': 
 
    case 'Sat': 
 
     return 'weight training'; 
 
     break; 
 
    default: 
 
     return 'Yoga or power walking'; 
 
     break; 
 
    } 
 
}); 
 

 
console.log(workouts);

+0

ありがとう! 1つの質問、ここでは "(日)"の目的は何ですか? – Jindi

+1

'map'メソッドを使用して配列をループすると、配列内のすべての項目で呼び出される関数は2つの引数をとります:最初の項目は現在の項目です(平日の配列の項目はすべての「日」)、2番目のものが現在のインデックスです。私たちはコード内にインデックスを必要としないので、私はそれを省いた。 [MDNのArray.prototype.map()を参照](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map?v=control) スイッチは、 (日)との比較をする。 基本的に: 'もし(日=== '水' ||日=== '月' ||日=== '金')'等 – Michiel

+1

それが得られました!あなたの助けをもう一度ありがとう! – Jindi

関連する問題