如何按指定数值的接近程度排序含feat属性的JavaScript对象数组?
按数值接近程度排序对象数组的正确实现
原代码存在的问题
- 变量名不匹配:使用了未定义的
bothpdiff,实际应使用定义好的numberdifference - 判断逻辑错误:错误检查对象的
id是否包含"heal",但"heal"是feat数组内元素的id - 差值计算未取绝对值:直接减法会导致负数差值干扰排序,无法正确反映接近程度
- 语法错误:
sort回调函数及if语句均未正确闭合
正确实现代码
var objects = [ {id: "obj1", feat: [{ id: "heal", value: 125 }] }, {id: "obj2", feat: [{ id: "heal", value: 350 }] }, {id: "obj3", feat: [{ id: "heal", value: 500 }] }, {id: "obj4", feat: [{ id: "heal", value: 1000 }] } ]; var numberdifference = 498; // 按heal的value与目标值的接近程度排序 var sorteditems = objects.sort((a, b) => { // 精准定位每个对象中id为heal的feat元素 const healA = a.feat.find(item => item.id === 'heal'); const healB = b.feat.find(item => item.id === 'heal'); // 计算差值的绝对值,确保接近程度判断不受正负影响 const diffA = Math.abs(healA.value - numberdifference); const diffB = Math.abs(healB.value - numberdifference); // 按绝对值从小到大排序,越接近越靠前 return diffA - diffB; }); console.log(sorteditems);
代码说明
- 用
Array.find()定位feat数组中id为"heal"的元素,适配feat数组后续新增其他元素的场景 - 通过
Math.abs()获取差值绝对值,保证接近程度的判断逻辑准确 - 回调函数返回两个绝对值的差值,实现从小到大排序,符合"越接近越靠前"的需求
运行后排序结果为:obj3(差值2)→ obj2(差值148)→ obj1(差值373)→ obj4(差值502),完全符合预期。
内容的提问来源于stack exchange,提问作者Cain Nuke
相关产品推荐
相关产品推荐

