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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:54:07