假设我有多维数组

var arr = [{
    "id": "1",
    "firstname": "SUSAN",
    "dezibel": "91"
}, {
    "id": "2",
    "firstname": "JOHNNY",
    "dezibel": "74"
}, {
    "id": "3",
    "firstname": "ANDREA",
    "dezibel": "67"
}];


如何用“ dezibel”对它进行排序,而不是升序或降序,但最接近给定数字?例如,

var num = 78;


因此目标值为78。最终排序必须为:74、67、91。

最佳答案

.sort可选地带有一个函数。该函数一次获取2个值,并对其进行比较:


如果第一个值的排序应高于第二个值,则该函数应返回一个正数。
如果第一个值的排序应低于第二个值,则函数应返回一个负数。
如果值相等,则函数应返回0


因此,如果您想按dezibel升序排序,则可以

arr.sort(function(a,b){
    return a.dezibel- b.dezibel;
});


但是,您要按dezibel与某个数字的距离进行排序。要从78dezibel值找到差异的大小,请取差异的绝对值:

Math.abs(78 - a.dezibel)


现在,如果我们要基于每个对象的值进行排序,则可以对Math.absa进行b调用的区别:

arr.sort(function(a,b){
    return Math.abs(78 - a.dezibel) - Math.abs(78 - b.dezibel);
});

关于javascript - 按预定义编号对数组进行排序,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34638496/

10-11 23:58
查看更多