我们说我有多维数组
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。
答案 0 :(得分:2)
编写一个排序函数,用于计算与您的数字的距离:
arr.sort(function(a, b){
return Math.abs(num-a) - Math.abs(num-b);
});
使用此选项对数组中的dezibel
属性进行排序。它将计算每个与num
之间的距离。然后它将选择两个距离中较小的一个,并以这种方式继续对整个数组进行排序。
答案 1 :(得分:2)
您需要使用自定义排序功能,将每个对象的dezibel
属性的绝对差值与78进行比较。
var arr = [{
"id": "1",
"firstname": "SUSAN",
"dezibel": "91"
}, {
"id": "2",
"firstname": "JOHNNY",
"dezibel": "74"
}, {
"id": "3",
"firstname": "ANDREA",
"dezibel": "67"
}];
num = 78;
arr.sort(
function(first,second){
var a = Math.abs(num - (+first.dezibel));
var b = Math.abs(num - (+second.dezibel));
return a - b;
});
alert(JSON.stringify(arr));
答案 2 :(得分:1)
按绝对差异排序。
var arr = [{ "id": "1", "firstname": "SUSAN", "dezibel": "91" }, { "id": "2", "firstname": "JOHNNY", "dezibel": "74" }, { "id": "3", "firstname": "ANDREA", "dezibel": "67" }],
num = 78;
arr.sort(function (a, b) {
return Math.abs(a.dezibel - num) - Math.abs(b.dezibel - num);
});
document.write('<pre>' + JSON.stringify(arr, 0, 4) + '</pre>');
&#13;
答案 3 :(得分:0)
.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
的{{1}}调用区分:
b
答案 4 :(得分:0)
您可以使用数组排序功能:
filter
答案 5 :(得分:0)
我只想添加一个距离,然后对其进行排序......
num=78
for e in arr
e.dist=Math.abs(e.dezibel - num)
arr.sort (l,r) =>
if l.dist > r.dist then 1 else -1
删除
之后的dist但是放在一行也没关系
arr.sort (l,r) =>
if Math.abs(l.dezibel - num) > Math.abs(r.dezibel - num) then 1 else -1