这两种排序方法有什么区别?

时间:2021-02-18 20:57:33

标签: reactjs

我有 2 种排序方法,想了解两者之间的区别。一种方法进行比较并返回一个整数。另一个从另一个元素中减去一个元素。请帮助我了解差异以及首选哪种方法。

const onSortByUpvotes = () => { 
  let sortedArr = [...articlesList]
  sortedArr.sort((a, b) => {
    if (a.upvotes > b.upvotes) {return -1}
    if (b.upvotes < b.upvotes) { return 1}
      return 0
    })
    setArticleList(sortedArr)
}

const onSortByUpvotes = () => {
    articlesList.slice().sort((a, b) => {
        return a.upvotes - b.upvotes
    })
    setArticleList(sortedArr)
}

2 个答案:

答案 0 :(得分:2)

两者的工作方式完全相同。第二个函数是第一个函数的隐式版本。后面看到的第二个函数作为第一个函数起作用。

<块引用>

articlesList.slice().sort((a, b) => { return a.upvotes - b.upvotes })

答案 1 :(得分:1)

两者的工作原理完全一样,因为函数只关心返回值是正数、负数还是零。

<块引用>

如果提供了 compareFunction,则所有未定义的数组元素将根据比较函数的返回值进行排序(所有未定义的元素都排序到数组的末尾,不调用 compareFunction)。如果 a 和 b 是要比较的两个元素,则:

<块引用>

如果 compareFunction(a, b) 返回小于 0,保持 a 和 b 不变。 如果 compareFunction(a, b) 返回 0,则使 a 和 b 彼此保持不变,但相对于所有不同元素进行排序。注意:ECMAScript 标准在 2019 年才开始保证这种行为,因此,较旧的浏览器可能不尊重这一点。 如果 compareFunction(a, b) 返回大于 0,则将 b 排在 a 之前。 当将特定的一对元素 a 和 b 作为两个参数时, compareFunction(a, b) 必须始终返回相同的值。如果返回不一致的结果,则排序顺序未定义。

请看这里:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#description

相关问题