如何按年龄升序对给定的人员对象数据进行排序?
按年龄升序排序人员对象数据的解决方案
你当前的代码无法生效,核心原因是:sort()是JavaScript数组的专属方法,而你定义的people是一个普通对象,不是数组,直接调用people.sort()会报错。
下面是两种可行的解决方案:
方案1:仅排序人员数据(不保留原编号键)
这种方式会得到一个按年龄升序排列的人员对象数组,适合不需要原编号的场景:
const people = { '1' : {'name' : 'Rohan', 'age' : 24}, '2' : {'name' : 'Ujjwal', 'age' : 27}, '3' : {'name' : 'Tara', 'age' : 18}, '4' : {'name' : 'Sagar', 'age' : 20}, '5' : {'name' : 'Kumar', 'age' : 21} }; // 提取对象中的所有人员数据转为数组,再按年龄升序排序 const sortedPeople = Object.values(people).sort((a, b) => a.age - b.age); console.table(sortedPeople);
方案2:保留原编号键的排序
如果需要保留原有的'1'、'2'这类编号键,可以先将对象转为键值对数组,排序后再转回对象:
const people = { '1' : {'name' : 'Rohan', 'age' : 24}, '2' : {'name' : 'Ujjwal', 'age' : 27}, '3' : {'name' : 'Tara', 'age' : 18}, '4' : {'name' : 'Sagar', 'age' : 20}, '5' : {'name' : 'Kumar', 'age' : 21} }; // 将对象转为[key, value]格式的数组,按年龄排序 const sortedEntries = Object.entries(people).sort(([, personA], [, personB]) => personA.age - personB.age); // 转回对象(ES6+环境下会保留排序后的插入顺序) const sortedPeopleWithKeys = Object.fromEntries(sortedEntries); console.table(sortedPeopleWithKeys);
关键逻辑说明
Object.values(people):提取对象中所有的人员数据,返回一个人员对象数组。sort((a, b) => a.age - b.age):升序排序的核心逻辑:若a.age - b.age为负数,a排在b前面;为正数则b在前;相等则保持原有顺序。Object.entries()和Object.fromEntries():配合使用完成对象键值对的排序与重组,保留原编号信息。
内容的提问来源于stack exchange,提问作者Sanjeet Kotarya
相关产品推荐
相关产品推荐

