4

私が言うことができるなら:

var big = (x > 10) ? true : false;

それ以外の:

var big;
if (x > 10) {
    big = true;
}
else {
    big = false;
}

これを同様に短くするにはどうすればよいですか?

var now = new Date

if (now.getHours() < 5) {
    return "late night pick me up";
}
else if (now.getHours() < 9) {
    return "breakfast";
}
else if (now.getHours() < 13) {
    return "lunch";
}
else if (now.getHours() < 17) {
    return "afternoon snak";
}
else {
    return "dinner";
}

たくさんありがとう!

4

9 に答える 9

9
var now = new Date().getHours();

return now < 5 ? "late night pick me up" :
       now < 9 ? "breakfast" :
       now < 13 ? "lunch" :
       now < 17 ? "afternoon snak" : "dinner";
于 2011-08-05T11:50:57.447 に答える
4

厄介なネストされた三項演算子の束がなければ、それはできません。三項演算子は、1 つのライナーにのみ適しています。

于 2011-05-20T15:54:53.240 に答える
3

特に、個人的には次のように書くだけです。

if (now.getHours() < 5) return "late night pick me up";
else if (now.getHours() < 9) return "breakfast";
else if (now.getHours() < 13) return "lunch";
else if (now.getHours() < 17) return "afternoon snak";
else return "dinner";

悪くないですよね?

于 2011-05-20T15:54:21.857 に答える
3

間違いなく読みにくくなるため、おそらくそうしたくないでしょう。ただし、次のように三項演算子を単純にネストすることもできます。

var now = (now.getHours() < 5) ? "late night pick me up" : ((now.getHours() < 9) ? "breakfast" : ((now.getHours() < 13) ? "lunch" : ((now.getHours() < 17) ? "afternoon snack" : "dinner")))));

なぜこれが良い考えではないのかお分かりいただけると思います!

このようなより長く、より複雑な条件では、一般に、複数の行とブロックを適切に分離して理解しやすくする必要があります。改行を追加することはほぼ間違いありませんが、if-else最終的には、意図を明確に表現する点で標準ブロックが勝者となります。

于 2011-05-20T15:54:49.110 に答える
2

まず、var big = x > 10;代わりに試してくださいvar big = (x > 10) ? true : false;

次に、return がある場合は if-else は必要ありません。

//looks  a little confusing, but you can move the return to line after ifs
var now = new Date  
if (now.getHours() < 5)  return "late night pick me up"; 
if (now.getHours() < 9)  return "breakfast";
if (now.getHours() < 13) return "lunch";
if (now.getHours() < 17) return "afternoon snak";
return "dinner"; 
于 2011-05-20T16:05:55.060 に答える
1

それはかなり厄介に見えます:

return ((now.getHours() < 5)?"late night pick me up":
         ((now.getHours() < 9)?"breakfast":
            ((now.getHours() < 13)?"lunch":
               ((now.getHours() < 17)?"afternoon snack":
                  "dinner"
               )
            )
          )
       );

かっこを一致させることを忘れないでください。

于 2011-05-20T15:53:45.383 に答える
1

いつでもswitchステートメントを使用できます。

switch(true)
{
case (now.getHours() < 5):
  return "late night pick me up";
  break;
case (now.getHours() < 9):
  return "breakfast";
  break;  //etc...
default:
  return "dinner";
}
于 2011-05-20T15:53:58.003 に答える
1

何か他のものを探していて、これに出くわしました。これは、論理演算子を使用し、文字列リテラルが真実であるという事実を乱用する簡単なトリックです =]

var hr = new Date().getHours();

return hr < 5 && 'late night pick me up' 
    || hr < 9 && 'breakfast' 
    || hr < 13 && 'lunch' 
    || hr < 17 && 'afternoon snack' 
    || 'dinner';
于 2012-09-08T06:32:43.967 に答える
0

いつでもテーブルを使用して機能を複製できます。

var now = new Date();
var meals = [
    "late night pick me up",
    "breakfast",
    "lunch",
    "afernoon snack",
    "dinner"];
return meals[parseInt(now.getHours()-4)/4];
于 2011-05-20T15:57:23.520 に答える