JavaScript中如何按age属性对JSON字符串排序 实现年长员工优先展示
问题分析与实现方案
现存代码的问题
你写的两个版本核心错误点一致:
- 调用逻辑错误:
sort()是JavaScript数组的原生方法,你需要先解析JSON拿到员工数组,再把比较函数作为参数传给数组的sort()方法,而不是在比较函数内部解析JSON、直接调用自定义的比较函数 - 执行顺序错误:你把JSON解析、排序调用、结果打印的代码都写在了比较函数内部,这些逻辑应该放在比较函数外部执行
- 排序逻辑颠倒:你需要年龄大的优先展示,应该返回
b.age - a.age实现降序,a.age - b.age是升序(年龄小的在前) - 冗余代码:第二个版本的for循环完全不需要,比较函数仅负责接收两个数组元素做对比,不需要自行遍历数组
正确实现代码
// 原始JSON字符串 var employees = '{"employees":[ {"name":"Lucas","surname":"White", "email":"email@gmail.com", "age":31, "work":{"Company":"userCompany", "role":"userRole"}, "car":[ {"brand":"userCar", "model":"userCar", "year":"userCar", "bollo":"userCar"} ]}, {"name":"Mary","surname":"userSurname", "email":"email@gmail.com", "age":29, "work":{"Company":"userCompany", "role":"userRole"}, "car":[ {"brand":"userCar", "model":"userCar", "year":"userCar", "bollo":"userCar"} ]} ]}' // 1. 先解析JSON为JS对象,取出员工数组 const employeeObj = JSON.parse(employees) const employeeList = employeeObj.employees // 2. 定义比较函数,按年龄降序排序 function sortDescByAge(a, b) { return b.age - a.age } // 3. 调用数组sort方法传入比较函数完成排序 const sortedList = employeeList.sort(sortDescByAge) // 打印结果 console.log(sortedList)
逻辑说明
- 解析JSON的操作仅需要执行一次,不需要放在比较函数里反复执行
- 比较函数
sortDescByAge会被sort()方法自动调用,每次传入两个待对比的员工对象,通过返回值的正负决定两个元素的排序位置 - 最终得到的
sortedList就是按年龄从大到小排序后的员工列表,可以直接用来渲染表格
内容的提问来源于stack exchange,提问作者yuls
相关产品推荐
相关产品推荐

