数组排序默认按字符串比,数字排序要传比较函数

sort 不传参数时把元素转成字符串,按 UTF-16 码元逐个比较。

所以 10 会排在 9 前面,因为字符 1 小于字符 9。

升序写 (a, b) => a – b,降序写 (a, b) => b – a 就行。

数字字符串先转 Number 再减,对象数组按字段差值比较。

// 反例:按字符串比,10 会排在 9 前面
[10, 9, 1, 100].sort();                  // [1, 10, 100, 9]

// 正例:数字升序 / 降序
[10, 9, 1, 100].sort((a, b) => a - b);   // [1, 9, 10, 100]
[10, 9, 1, 100].sort((a, b) => b - a);   // [100, 10, 9, 1]

// 字符串形态的数字,先转数值
["10", "9", "1"].sort((a, b) => Number(a) - Number(b));

// 对象数组按字段排
list.sort((a, b) => a.score - b.score);

// sort 本身是稳定的(ES2019 起),差值相同会保持原有先后顺序
THE END
喜欢就支持一下吧
点赞15 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容