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

如何按对象name属性中#后的数字对对象数组排序

实现方案

核心是在数组的sort方法的比较函数中,提取每个对象name字段中#后的数字,再按数字大小比较即可。

基础实现代码

const question = [{name:"Question 1 #1", content:"blabla?"}, {name:"Question 1 #3", content:"blabla?"}, {name:"Question 1 #4", content:"blabla?"}, {name:"Question 1 #2", content:"blabla?"}];

const sortedQuestion = question.sort((a, b) => {
  // 提取name中#后的数字并转成数值类型
  const numA = Number(a.name.split('#')[1]);
  const numB = Number(b.name.split('#')[1]);
  // 按数字升序排序,需要降序的话改成 return numB - numA 即可
  return numA - numB;
});

console.log(sortedQuestion);

注意事项

  • 用split('#')切割字符串的方案默认name中只有一个#,如果你的场景中可能存在多个#,可以用正则匹配提取,鲁棒性更强:
    // 匹配字符串中第一个#后面的连续数字
    const getOrderNum = (str) => Number(str.match(/#(\d+)/)[1]);
    const sortedQuestion = question.sort((a, b) => getOrderNum(a.name) - getOrderNum(b.name));
    
  • sort方法默认会修改原数组,如果需要保留原始数组,可以先做浅拷贝再排序:
    const sortedQuestion = [...question].sort((a, b) => Number(a.name.split('#')[1]) - Number(b.name.split('#')[1]));
    

内容的提问来源于stack exchange,提问作者Haine Thomas

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 05:57:01