假设我有多维数组
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
与某个数字的距离进行排序。要从78
和dezibel
值找到差异的大小,请取差异的绝对值:Math.abs(78 - a.dezibel)
现在,如果我们要基于每个对象的值进行排序,则可以对
Math.abs
和a
进行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/