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






暂无评论内容