2

name変数に変数を代入する JavaScript 式がありrenamedます。1 つの例外を除いて、常に同じです。

renamed =  name == 'John' ? 'Johnny' : name;

ただし、次の 2 つの除外が必要です。

  1. ジョンをジョニーに改名
  2. アレックスをアレクサンダーに改名
  3. 他のすべての名前は、変更なしで割り当てられます。

この式を 1 つの文字列で記述できますか?

renamed =  (name == 'John' || name == 'Alex') ? <____> : name;

1 つの文字列で実行する必要があります。

ありがとうございました。

4

3 に答える 3

5
(name === 'John' && 'Johny') || (name === 'Alex' && 'Alexander') || name;
  • nameである場合John、式の次の部分に進み、&&を返しますJohny

  • nameである場合Alex、最初のケースのようなものは を返しますAlexander

  • どちらも真でない場合は、nameをそのまま返します。

デモ

JavaScript では、&&演算子は左側の式を評価し、それが偽の場合は値が返され、右側の式はまったく評価されないため、このソリューションは機能します。

左側の式が Truthy と評価された場合、右側の式が評価され、結果がそのまま返されます。例えば

console.log(1 && 2);
# 2
console.log(0 && 2);
# 0

最初に を評価し1、Truthy であるため2評価され、値が返されます。それが印刷する理由2です。

2 番目のケースで0は、Falsy と評価されます。ということで、即返却。それが印刷する理由0です。

同じ方法

console.log("John" && "Johny");
# Johny

JohnTruthy であると評価されるため、Johnyも評価されて返されます。それが私たちが得る理由ですJohny

ECMA 5.1 規格に従って、次の表に従って、オブジェクトの真実性が決定されます。

+-----------------------------------------------------------------------+
| Argument Type | Result                                                |
|:--------------|------------------------------------------------------:|
| Undefined     | false                                                 |
|---------------|-------------------------------------------------------|
| Null          | false                                                 |
|---------------|-------------------------------------------------------|
| Boolean       | The result equals the input argument (no conversion). |
|---------------|-------------------------------------------------------|
| Number        | The result is false if the argument is +0, −0, or NaN;|
|               | otherwise the result is true.                         |
|---------------|-------------------------------------------------------|
| String        | The result is false if the argument is the empty      |
|               | String (its length is zero); otherwise the result is  |
|               | true.                                                 |
|---------------|-------------------------------------------------------|
| Object        | true                                                  |
+-----------------------------------------------------------------------+

注:最後の行にObjectは、オブジェクトと配列の両方が含まれています。

于 2014-04-23T10:04:54.367 に答える
3

renamed = (name == 'john') ? 'johney': (name == 'alex'? 'alexander' : name);

于 2014-04-23T10:09:22.787 に答える
2

あなたはこれを試すことができます:

renamed = (name == 'John' ? 'Johnny' : (name == 'Alex' ? 'Alexander' : name));
于 2014-04-23T10:06:43.783 に答える