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

如何对含数字与字符串值的对象数组按name属性排序?

JavaScript 对象数组按 name 属性实现自然排序

要实现你期望的按name属性的自然排序(字母前缀分组,后缀数字按数值大小排序),可以直接使用localeCompare并配置合适的参数,结合数组的sort方法完成。

实现代码

const arr = [
  {id:1, name: 'A1'},
  {id:2, name: 'A2'},
  {id:3, name: 'A3'},
  {id:4, name: 'B1'},
  {id:5, name: 'B2'},
  {id:6, name: 'A21'},
  {id:7, name: 'A11'},
  {id:8, name: 'A4'},
  {id:9, name: 'A12'},
];

// 排序逻辑
const sortedArr = [...arr].sort((a, b) => {
  return a.name.localeCompare(b.name, undefined, {
    numeric: true, // 让字符串中的数字按数值大小排序,而非字符串字典序
    sensitivity: 'base' // 忽略大小写差异(增强通用性,当前场景统一大写可省略)
  });
});

console.log(sortedArr.map(item => `${item.id}:${item.name}`).join(', '));
// 输出:1:A1, 2:A2, 3:A3, 8:A4, 7:A11, 9:A12, 6:A21, 4:B1, 5:B2

关键参数说明

  • numeric: true:核心配置,它会识别字符串中的数字片段并按数值大小比较,解决了默认字符串排序中"A11"排在"A2"之前的问题,让数字部分遵循数值逻辑排序。
  • sensitivity: 'base':确保只有字符本身不同时才区分排序,避免大小写、重音等无关因素干扰排序结果。

补充说明

你给出的期望结果中未包含id:8的A4,按照标准自然排序逻辑,A4应排在A3之后、A11之前,上述代码会输出完整的符合自然排序规则的结果。如果需要排除特定元素,可在排序后额外执行过滤操作。

内容的提问来源于stack exchange,提问作者Nawapol R.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:41:29