【问题标题】:How do I write a shorter arrow function using an if without curly braces around the body如何使用没有花括号的 if 编写更短的箭头函数
【发布时间】:2021-04-08 11:39:05
【问题描述】:

我想要这个,但使用箭头的行数更少

console.log([1, 2, 3, 4].every(
  value => {
    if (value > 0) {
      return 1
    }
  }))

输出:真

它工作正常,但是当我试图减少下面的代码行时它不起作用有没有办法做到这一点,是否不能在不使用任何三元的情况下编写单个 if 语句

console.log([1, 2, 3, 4].every(value =>
  if (value > 0) 1)
);
output :  /tmp/main.js:1
console.log([1,2,3,4].every(value=> if(value>0) 1)) 
                                    ^^

SyntaxError: Unexpected token 'if'
    at Module._compile (internal/modules/cjs/loader.js:892:18)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
    at Module.load (internal/modules/cjs/loader.js:812:32)
    at Function.Module._load (internal/modules/cjs/loader.js:724:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)
    at internal/main/run_main_module.js:17:11

[Program exited with exit code 1]

是否可以使用像这样的箭头运算符返回除 true 或 false 之外的任何内容?我想返回真棒,但它给我一个错误。

k=val=>val>0 "awesome";
console.log(k(2))
k=val=>val>0 "awesome";
             ^^^^^^^^^

SyntaxError: Unexpected string
    at Module._compile (internal/modules/cjs/loader.js:892:18)
    at Object.Module._extensions..js (internal/modules/cjs/loader.js:973:10)
    at Module.load (internal/modules/cjs/loader.js:812:32)
    at Function.Module._load (internal/modules/cjs/loader.js:724:14)
    at Function.Module.runMain (internal/modules/cjs/loader.js:1025:10)
    at internal/main/run_main_module.js:17:11

我试图问这个基于箭头函数的问题,但有人告诉我单独问这个问题,这就是我在这里问的原因。

【问题讨论】:

  • 只是value=> value>0。你不能使用if,因为它是一个语句,一个没有主体的箭头函数只需要一个表达式。此外,没有真正的理由返回1
  • 只需使用ternary operator。
  • @DaneBrouwer 为什么?
  • @VLAZ 啊,误读了这个问题。看到 OP 返回了1,所以我认为他们想从条件中返回某种值。从字面上看,应该能够按照您的建议提供条件。
  • @VLAZ 非常感谢我明白了 value=> value>0 它会返回 true 因此每个函数都直接将其视为 true 假设我想返回除 1 或 0 之外的任何值,例如 value=>如果 val>1 "真棒" 在这种情况下我该怎么做?不使用 {} 有可能吗?

标签: javascript node.js arrow-functions


【解决方案1】:

您可以通过以下方式进行操作

console.log([1, 2, 3, 4].every(value => value > 0))

【讨论】:

    【解决方案2】:

    console.log([1, 2, 3, 4].every(value => value > 0) ? "awesome" : null)

    【讨论】:

    • 在这种情况下使用三元运算符是没有意义的@RashedRahat
    • 如果我想在不使用任何三元运算符或 {} 的情况下在 value>0 时返回类似 "awesome" 的字符串怎么办,是否可以这样做?
    • @IndratejReddy 是。每个的回调是(元素,索引,数组)。如果你愿意,你可以修改数组,但这不是 OP 想要的。
    • @Cyber​​Eternal 只是想尝试一下,因为我的好奇心 :)
    • @SilviuBurcea 是否可以使用像这样的箭头运算符返回除真或假之外的任何内容,我想返回真棒,但它给我一个错误 k=val=>val>0 "awesome"; console.log(k(2)) k=val=>val>0 "真棒";
    猜你喜欢
    • 2022-01-19
    • 2017-05-22
    • 2016-05-28
    • 2016-12-18
    • 2020-06-21
    • 2018-04-25
    • 2020-11-13
    • 2018-08-31
    相关资源
    最近更新 更多