【问题标题】:Sorting in ascending order按升序排序
【发布时间】:2018-03-31 21:38:16
【问题描述】:

作为 ES6 和 JavaScript 的新手,当我需要按特定键对对象数组进行排序时,我会这样做:

objectArray.sort(x=> x.orderKey).reverse();

在性能方面,由于reverse方法在另一个循环中运行原始数组或者它可能会创建一些额外的临时变量(但是我不确定它的机制),我认为这是不正确的解决方案。是否有任何允许指定降序或升序的内置功能?

【问题讨论】:

  • Array#sort() 需要比较 2 个参数。显示的内容没有多大意义。请提供minimal reproducible example
  • @charlietfl: 使用单个参数我可以按降序排序

标签: javascript ecmascript-6


【解决方案1】:

Array#sort 工作方式不同。

您需要指定两个给定元素的顺序,并根据项目的顺序返回一个小于零、零或大于零的值。

如果orderKey 是一个数值,您可以返回应该是升序值的增量

objectArray.sort((a, b) => a.orderKey - b.orderKey)

对于相反的顺序,您可以交换计算操作数。

对于字符串值,您可以使用比较

objectArray.sort((a, b) => (a, b) => a.orderKey > b.orderKey || -(a.orderKey < b.orderKey))

String#localeCompare

objectArray.sort((a, b) => a.orderKey.localeCompare(b.orderKey))

【讨论】:

  • 我不明白,如果我想根据字符串值排序,那么string - string 可以吗?
  • @dv,不用问,还是?
  • 这不是一个好的解决方案,在这种情况下,我宁愿编写自己的函数来以更有效的方式完成它。我还没有测试过,但看起来很慢。
  • @Arrrr 这些话没有多大意义,你肯定不会让它比这个解决方案更短(或更快)。
  • 我实际上是在将压力从服务器转移到客户端,所以我追求的是最高速度的功能,而不是只管用的东西
猜你喜欢
  • 2013-05-03
  • 2015-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 1970-01-01
  • 2012-11-08
  • 2023-03-07
相关资源
最近更新 更多