【问题标题】:Why does adding {} to sort function change the answer? [duplicate]为什么将 {} 添加到排序函数会改变答案? [复制]
【发布时间】:2021-06-29 13:45:42
【问题描述】:

为什么在第二个排序函数中添加 {} 会“破坏”排序(将其改回按字母顺序排序?):

console.log([10, -2, 49].sort((a,b) => a-b))
console.log([10, -2, 49].sort((a,b) => {a-b}))

这更像是为什么 JS 会做这种类型的问题,而不是修复我的代码类型的问题。

【问题讨论】:

  • 因为一个有返回值,另一个没有。请阅读从箭头函数返回的不同方法here
  • 第二个添加了一个没有返回语句的块

标签: javascript


【解决方案1】:

javascript中sort方法的回调函数需要返回一个值,当您将{}放在函数内容周围时,您实际上是从函数返回undefined,而您在函数内的代码只是在其中执行的表达式

当你使用{}时,你需要一个显式的return语句来返回值

console.log([10, -2, 49].sort((a,b) => a-b))
console.log([10, -2, 49].sort((a,b) => {return a-b;}));

在第一种情况下它可以工作,因为当您使用该语法编写函数时,它具有隐式返回。

您可以在这篇文章中了解更多关于显式和隐式返回的信息:

Arrow functions and the use of parentheses () or {} or ({})

【讨论】:

    【解决方案2】:

    好的,这是常见的混淆,/ 功能 1

    const func = (a,b ) => a+b 
    

    相当于 , 功能 2

    const func = (a,b) => {
    return (a+b)
    }
    

    所以当你使用花括号时,你必须明确使用return关键字,而使用()不需要使用return关键字。

    【讨论】:

      【解决方案3】:

      当您有箭头函数(=>)时,您可以使用自动返回表达式的单行语句或多行语句,这需要在语句周围使用{},因此需要return。通过添加{},您将获得多行语句表单。所以需要在花括号内加一个return,否则什么都不返回。

      https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions

      注意,如果要从单行数组函数语句中返回对象,请将其括在括号中:

      ((a, b) => ({ c: a + b }))(1, 2) // {c: 3}
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-08-18
        • 1970-01-01
        • 1970-01-01
        • 2013-09-02
        • 2016-10-22
        • 2019-02-18
        • 2022-01-10
        相关资源
        最近更新 更多