2016-08-14 4 views
0

私は選択した日のセットを繰り返し実行し、今日は選択したセットの一部であればtrueを呼び出します。ただしまたはtodayに関係なくisDayのリングfalseに関係なく、それでは、私がここで行方不明です。..曜日を反復する

var date = new Date; 
var isDay; 
var today=date.toString().substring(0,4) 
//console.log(today)//good 
for (var daysChosen of ['Sun','Mon','Tue','Wed','Thu']) 
{ 
    console.log(daysChosen)//good 
    isDay = today==daysChosen ? true : false 
} 
console.log(isDay)//bad, should be true if today is part of daysChosen 

更新:?、これは地球上で、これがtodayことを考えると、trueに評価できる方法をいくつかBULL **** !!! ... [OK]を です配列である!?...

for (var value of ['Sun','Mon','Tue','Wed','Thu','Fri']) 
    {  
     var _day = (today!=value) ? true : false 
     break; 
    } 
console.log(_day) 
+1

をあなたは破る 'にする必要があります;' isDay =今日== daysChosen後 'あなたのループ? trueの場合はtrue、そうでない場合は 'Thu'の場合のみtrueとなります。 – RononDex

+0

lol "ring' true' "" rings 'false'" Inventive!私はそれが好きです。 –

答えて

2

コードに問題が発生する場合があります。

  1. var today=date.toString().substring(0,4) - 日数は3文字で、末尾に余分なスペースがあります。 today === "Sun "、余分なスペースに注意してください。

  2. 他の回答が指摘している正しい値を見つけたら、ループを壊さないようにしてください。


は、あなたは、単にindexOfメソッドを使用することができます。指定された文字列のインデックスを返します。配列に含まれていない場合は-1を返します。

var date = new Date(); 
// first 3 characters from string for day of week 
var today = date.toString().substring(0,3); 
var days = ['Sun','Mon','Tue','Wed','Thu']; 

var isInDays = days.indexOf(today) > 0; // indexOf returns -1 if not contained 

たり、既存のコードを修正する:

var date = new Date; 
var isDay; 
var today=date.toString().substring(0,3) 
//console.log(today)//good 
for (var daysChosen of ['Sun','Mon','Tue','Wed','Thu']) 
{ 
    console.log(daysChosen)//good 
    isDay = today==daysChosen ? true : false 
    if(isDay) break; // must break once you find it or you will keep overriding the value. 
} 
2

あなたのループがisDaytrueになり、次の反復でそれにfalseを割り当てることができたときにループし続けます。あなたは、ループを終了するbreakステートメントを使用することができます

var isDay = false; 
for (var daysChosen of ['Sun','Mon','Tue','Wed','Thu']) 
{ 
    if (today == daysChosen) { 
     isDay = true; 
     break; 
    } 
} 

あなたはまた、配列はtodayが含まれているかどうかを確認するためArray.prototype.find()機能を使用することができます。 (!!は二重否定である):

var isDay = !!['Sun','Mon','Tue','Wed','Thu'].find(function(day) { 
    return day === today;   
}) 

残念ながらfindはすべてのブラウザとcompatibleではありません。

+0

他の解決方法はありますか? https://jsfiddle.net/znibble/7e06LmLe/ – cube

0

あなたは物事の配列を持って、それが何かを持っているかどうかを確認したい場合は、私がアレイ上に新しい.includes()プロパティ使用します。代わりに、文字列から曜日を抽出すること、また

["Sun", "Mon", "Tue", "Wed", "Thu"].includes(today); 

を出力は、Date.prototype.getDay()を使用してください。


あなたはポリフィルを含めない場合、あなたは私がCodegolf.SEから学んだこのトリックを使用することができます。

~["Sun", "Mon", "Tue", "Wed", "Thu"].indexOf(today); 

~は内のビットを変えていくバイナリNOT演算子、ありますデータ型をその逆にします。検索用語のインスタンスが存在しないときに.indexOf()から返される-1のバイナリNOTは0です.JavaScriptでは、強制と呼ばれるコンセプトがあります。つまり、ブール値を追加するなどの一般的な不協和音があるとします。別のタイプに変換する1つのタイプの値。たとえば、ゼロでないすべての数値はtrueに強制的に変換され、0falseに変換されます。これを受けて、上記のテキストをifステートメントに入れると、それは.includes()のようになります。


あなたは良い習慣ではありませんDate.toString()から曜日を抽出している

良い方法。プロセスは、より多くの論理的にするために配列アクセスとDate.prototype.getDay()を使用することを検討してください:

let today = new Date().getDay(); 
// Sun., Mon., Tue., etc. 
if ([true, true, true, true, true, false, false][today]) { 
    // Day is matched 

} else { 
    // Day is not matched 
} 

これは、いくつかの利点

  1. 究極のカスタマイズ性があります。一致する日付を正確に指定できます
  2. 文字列に依存しません。文字列から抽出する方法は、英語以外のユーザーエージェントでは、日付文字列が異なるため、トリガーされてしまいます。
+0

動作しません:https://jsfiddle.net/znibble/7e06LmLe/ – cube

+0

どのブラウザをお使いですか?私はそれをサポートしていない主要なブラウザであるため、Internet ExplorerやEdgeを推測しています。 [MDNページ](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/includes#Polyfill)には、ポリフィルがあります。これは '.includes ) 'はどこでも動作します – MayorMonty

+0

私はChromeを使用しています – cube

関連する問題