如何从给定对象中提取careerID值最高的careerLevels元素?
实现需求的JavaScript技术方案
核心思路
咱们要做的事儿拆成两步就很清晰:
- 从
careerLevels数组里筛选出careerID数值最大的那个元素 - 把这个元素里的
careerID字段移除,剩下的就是最终需要的结果
代码实现
这里给你两种实用的实现方式,你可以根据自己的代码习惯选择:
方式一:用reduce高效定位最大值元素
const input = { "careerLevel": "Associate", "careerLevels": [ { "201609": 21, "201610": 22, "201611": 23, "careerID": "10000120" }, { "201609": 31, "201610": 32, "201611": 33, "careerID": "10000130" } ] }; // 遍历数组,找到careerID最大的元素 const maxCareerItem = input.careerLevels.reduce((prev, curr) => { // 必须转成数字再比较,避免字符串排序的坑 return Number(curr.careerID) > Number(prev.careerID) ? curr : prev; }); // 用解构赋值移除careerID字段,生成结果 const { careerID, ...output } = maxCareerItem; console.log(output); // 输出: {"201609": 31, "201610": 32, "201611": 33}
方式二:先排序再取最大值(更直观的写法)
const input = { "careerLevel": "Associate", "careerLevels": [ { "201609": 21, "201610": 22, "201611": 23, "careerID": "10000120" }, { "201609": 31, "201610": 32, "201611": 33, "careerID": "10000130" } ] }; // 先复制数组再按careerID从大到小排序(避免修改原数组) const sortedCareers = [...input.careerLevels].sort((a, b) => { return Number(b.careerID) - Number(a.careerID); }); // 取排序后的第一项,移除careerID字段 const { careerID, ...output } = sortedCareers[0]; console.log(output); // 输出: {"201609": 31, "201610": 32, "201611": 33}
关键注意点
- 一定要把
careerID转成数字再比较!如果直接用字符串对比,比如"10000130"和"999999",字符串排序会错误认为"999999"更大。 - 用解构赋值
{ careerID, ...output }不会修改原数组里的元素,是更安全的做法;如果直接用delete maxCareerItem.careerID会改变原对象,可根据你的场景选择。
内容的提问来源于stack exchange,提问作者user3205921
相关产品推荐
相关产品推荐

