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

如何按last_name排序JavaScript对象中data数组内的嵌套对象?

按对象的last_name字段排序JavaScript数组

嘿,你说的这个问题其实挺常见的——给数组里的对象按last_name值排序对吧?其实用JS自带的Array.sort()方法就能轻松搞定,不管是升序还是降序都很简单,而且能处理大量数据。

先明确需求场景

你的原始数据结构大概是这样的(补全了省略的部分方便演示):

const originalData = {
  "data": [
    {"DT_RowId":"row_1","first_name":"Tiger","last_name":"Nixon","age":"61"},
    {"DT_RowId":"row_2","first_name":"Garrett","last_name":"Winters","age":"63"},
    {"DT_RowId":"row_3","first_name":"Ashton","last_name":"Cox","age":"66"},
    {"DT_RowId":"row_4","first_name":"Cedric","last_name":"Kelly","age":"22"}
  ]
};

我们的目标是给originalData.data里的对象按last_name升序/降序排序,同时最好不破坏原数组(避免后续操作出问题)。


1. 升序排序(A-Z)

要实现升序,我们可以用字符串的localeCompare()方法,它能正确处理各种字符的排序(比直接用>或<更可靠,比如带特殊符号的字符)。而且为了不修改原数组,我们先复制一份数组再排序:

// 先复制原数组,避免修改原始数据
const sortedAscData = [...originalData.data].sort((a, b) => {
  // 按last_name升序排列
  return a.last_name.localeCompare(b.last_name);
});

// 输出结果:Ashton Cox → Cedric Kelly → Tiger Nixon → Garrett Winters
console.log(sortedAscData);

2. 降序排序(Z-A)

降序只需要把localeCompare里的两个参数反过来就行:

const sortedDescData = [...originalData.data].sort((a, b) => {
  // 按last_name降序排列
  return b.last_name.localeCompare(a.last_name);
});

// 输出结果:Garrett Winters → Tiger Nixon → Cedric Kelly → Ashton Cox
console.log(sortedDescData);

关键细节提醒

  • Array.sort()是原地排序,也就是会直接修改原数组,所以用扩展运算符[...arr]或者arr.slice()先复制一份是很有必要的,这样原数据不会被改变。
  • localeCompare()支持传入额外参数处理多语言排序,比如a.last_name.localeCompare(b.last_name, 'en', { sensitivity: 'base' }),可以忽略大小写和特殊符号,根据你的需求调整就行。

如果需要生成新的完整对象,直接把排序后的数组赋值给data字段即可:

const newSortedData = {
  data: sortedAscData
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:40:03