繁体   English   中英

有人可以解释 javascript 排序方法是如何工作的吗?

[英]can someone explain how javascript sort method works?

我遇到了这个 javascript 代码,其中涉及带有自定义返回的sort方法。

const nums =  ['9', '5', '3', '34', '30' ];
const num = nums.map(n => n.toString()).sort((a,b) => a + b < b + a? 1: -1).join('')

本质上,此代码返回最大可能的 integer。 我有排序的基本知识,如果您希望数字按升序排列,那么您将使用ab进行返回。 如果需要降序,那么您将使用ba

我想知道ab是如何在幕后工作的。 我找不到详细解释排序如何工作的来源。 我想逐步了解sort何时起作用; 它会让我更好地了解上面的代码是如何工作的。

您的帮助将不胜感激。

详细信息可以在规范中找到。 基本上, sort通过调用重复的回调来比较数组中的两个条目来工作。 如果a "小于" b (根据特定回调想要应用的任何规则来表示 "小于" 的含义),回调应该返回 -1,如果它们相同,则返回 0,如果a是 ",则返回 1"大于" b . 它继续这样做,使用数组中的不同条目对,直到它对数组进行排序。

如何sort取决于实现,规范中没有规定。 所有规范都规定了上面的段落,并且(最近)排序必须是稳定的。

关于您显示的特定代码的一些注释:

  • arr应该是第一行中的nums
  • map调用没有意义,数组中的条目已经是字符串
  • 它所做的比较是按字母顺序进行的
  • sort方法编码错误,因为如果ab相同,它返回 -1,而不是 0

你会采取一些不同的回调,它以不同的顺序添加两个值并返回两者的增量。

它通过获取最终结果的部分字符串来工作,并更改顺序以获得两个项目的最大值。

例如,给定的数据在 EDGE 中按以下顺序排序:

 abb + aa + b delta comment array -- -- ----- ----- ----- ------- -------------- 3 5 9 30 34 3 5 53 35 -18 switch 5 3 9 30 34 3 9 93 39 -54 switch 5 9 3 30 34 5 9 95 59 -36 switch 9 5 3 30 34 3 30 303 330 27 keep 9 5 3 30 34 30 34 3430 3034 -396 switch 9 5 3 34 30 5 34 345 534 189 keep 9 5 3 34 30 3 34 343 334 -9 switch 9 5 34 3 30

 const array = ['3', '5', '9', '30', '34'], result = array.sort((a, b) => (b + a) - (a + b)).join(''); console.log(...array); console.log(result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM