如何按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
相关产品推荐
相关产品推荐

