TwKit
正在载入
TwKit

JavaScript 数组排序,容易踩坑的地方不止是“从小到大”。 [12, 3, 21].sort() 得到的是 [12, 21, 3]。没传比较函数时,… · @BaiBtw · TwKit

@BaiBtw

JavaScript 数组排序,容易踩坑的地方不止是“从小到大”。 [12, 3, 21].sort() 得到的是 [12, 21, 3]。没传比较函数时,元素会按转成字符串后的 UTF-16 码元顺序比较,不会自动按数值大小排。对普通数字数组,可以写 sort((a, b) => a - b),结果才是 [3, 12, 21]。 比较函数返回负数,表示 a 排在 b 前面;正数表示排在后面;0 表示这次比较相等。不要用 a > b 代替:它只给出 true 或 false,缺少“排在前面”的负数结果。 另一个坑是原数组会被改掉。const result = items.sort(...) 并没有得到一份独立数组,result 和 items 指向同一个数组。需要保留原顺序,可以用 items.toSorted(...),或先复制再排序。浅复制只分开数组本身,不会复制里面的对象。 排序稳定也不等于“不改原数组”。稳定说的是:比较结果相等的元素,保持排序前的相对次序。比如按分数排序,同分的人仍按原来的先后排列。现代 JavaScript 已要求 sort 稳定,但比较规则仍要写完整,不能忽大忽小。

曝光 59 · 评论 1 · 点赞 2 · 书签 0

查看原帖