You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按字符串末尾的数值对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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 01:19:50