我需要对一组值进行排序。
var arr = [0.3, 0.76, 0.98, 1.12, 1.36, 1.9];
哪个值最接近 1
,这将(在上面的示例中)导致:
[0.98, 1.12, 0.76, 1.36, 0.3, 1.9];
我通过使用自定义排序功能知道这一点。
arr.sort(function(a, b){
return b - a;
});
我可以控制 sort()
的工作方式,但是,我不明白我将如何设计自定义函数以使其以所需的方式工作。
也许有人可以启发我。
最佳答案
只需检查它们与 1 的距离。
arr.sort(function(a, b){
return Math.abs(1-a) - Math.abs(1-b);
});
简单来说,它计算两个数字与 1 的距离,即对于
a=-10
和b=4
,距离分别是11和3。这 函数返回一个正数,所以 4 出现在前面 -10 在排序数组中。- 对于
a=-1
和b=4,
距离为 2 和 3,函数 返回一个负数,因此 -1 在数组中出现在 4 之前。
根据评论中的要求,以下改编将优先考虑低于 1 的值。
arr.sort(function(a, b){
if(a<1 && b>=1){return -1;}
if(a>=1 && b<1){return 1;}
return (Math.abs(1-a) - Math.abs(1-b));
});
关于javascript - 对值最接近 1 的数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26922131/