如何按字符串末尾的数值对JavaScript数组进行降序排序?
问题解决:按字符串末尾数值排序数组
你的代码无法生效,是因为直接对字符串执行b-a运算——字符串不能直接做算术减法,sort回调得不到正确的排序依据。要实现按每个字符串末尾的数值降序排序,需要先提取出每个元素里的数字,再用数字来比较。
解决方案1:分割字符串提取数字
通过split("-")分割字符串,取最后一段内容并转换为数字,再进行比较:
const points = ["Apple - 40", "Orange - 80", "Lemon - 140"]; points.sort(function(a, b) { // 提取a的数值:分割后取最后一项,去除空格转数字 const numA = Number(a.split("-")[1].trim()); // 提取b的数值 const numB = Number(b.split("-")[1].trim()); // 降序排序:b的数值减a的数值 return numB - numA; }); console.log(points); // 输出: ["Lemon - 140", "Orange - 80", "Apple - 40"]
解决方案2:正则匹配提取数字
如果字符串格式有变化(比如分隔符不是-,或者数字位置不固定但在末尾),用正则匹配末尾的数字更通用:
const points = ["Apple - 40", "Orange - 80", "Lemon - 140"]; points.sort(function(a, b) { // 匹配字符串末尾的数字序列 const numA = Number(a.match(/\d+$/)[0]); const numB = Number(b.match(/\d+$/)[0]); return numB - numA; }); console.log(points); // 输出: ["Lemon - 140", "Orange - 80", "Apple - 40"]
说明
- 两种方法核心都是先把字符串里的数值提取出来,再用数值做排序比较
return numB - numA是降序排序,如果要升序,改成numA - numB即可
内容的提问来源于stack exchange,提问作者c4l
相关产品推荐
相关产品推荐

