2

有一个 javascript 表达式将name变量分配给renamed变量。一个排除总是相同的:

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

但是,我想要两个排除项:

  1. 将 John 重命名为 Johny
  2. 将 Alex 重命名为 Alexander
  3. 所有其他名称均未更改。

是否可以将这个表达式写在一个字符串中?

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

我需要它在一个字符串中完成。

谢谢你。

4

3 回答 3

5
(name === 'John' && 'Johny') || (name === 'Alex' && 'Alexander') || name;
  • 如果nameJohn,则它转到&&表达式的下一部分并返回Johny

  • 如果nameAlex,则返回第一种情况下的 like Alexander

  • 如果它们都不为真,则按原样返回name

演示

这个解决方案之所以有效,是因为在 JavaScript 中,&&运算符会计算左侧的表达式,如果它是假的,那么将返回该值,而右侧的表达式根本不会被计算。

如果左边的表达式计算为 Truthy,那么右边的表达式将被计算并返回结果。例如

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

它首先评估1,它是 Truthy,所以它2被评估并返回值。这就是它打印的原因2

在第二种情况下,0被评估为 Falsy。所以,它立即被退回。这就是它打印的原因0

一样的方法

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

John将被评估为真实,因此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 回答