[英]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
。
我想知道a
和b
是如何在幕后工作的。 我找不到详细解释排序如何工作的来源。 我想逐步了解sort
何时起作用; 它会让我更好地了解上面的代码是如何工作的。
您的帮助将不胜感激。
详细信息可以在规范中找到。 基本上, sort
通过调用重复的回调来比较数组中的两个条目来工作。 如果a
"小于" b
(根据特定回调想要应用的任何规则来表示 "小于" 的含义),回调应该返回 -1,如果它们相同,则返回 0,如果a
是 ",则返回 1"大于" b
. 它继续这样做,使用数组中的不同条目对,直到它对数组进行排序。
如何sort
取决于实现,规范中没有规定。 所有规范都规定了上面的段落,并且(最近)排序必须是稳定的。
关于您显示的特定代码的一些注释:
arr
应该是第一行中的nums
map
调用没有意义,数组中的条目已经是字符串sort
方法编码错误,因为如果a
和b
相同,它返回 -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.