Javascript 对值最接近1的数组进行排序

Javascript 对值最接近1的数组进行排序,javascript,arrays,sorting,Javascript,Arrays,Sorting,我需要对一组值进行排序 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的距离就可以了

我需要对一组值进行排序

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));
});
arr.sort(函数(a,b){
如果(a=1){return-1;}

如果(a>=1&&b如果希望小于1的数字偏向于排序小于大于1的等距数字,则测试增量是否相等,如果相等,则修改其中一个值:

var arr = [1.02, 0.3, 0.76, 0.98, 1.12, 1.36, 1.9, 1.24];

// Unbiased
arr.sort(function(a, b){
    return Math.abs(1-a) - Math.abs(1-b);
});

console.log('unbiased: ' + arr); // unbiased: 1.02,0.98,1.12,0.76,1.24,1.36,0.3,1.9

var arr = [1.02, 0.3, 0.76, 0.98, 1.12, 1.36, 1.9, 1.24];

// Biased so numbers less than 1 sort higher than those greater than 1
// where their difference from 1 is equal
arr.sort(function(a, b) {
  var da = 1 - a;
  var db = 1 - b;

  da -= da < 0? 1e-14 : 0;
  db -= db < 0? 1e-14 : 0;

  return Math.abs(da) - Math.abs(db);
});

console.log('biased: ' + arr); // biased: 0.98,1.02,1.12,0.76,1.24,1.36,0.3,1.9
var-arr=[1.02,0.3,0.76,0.98,1.12,1.36,1.9,1.24];
//不偏不倚
arr.sort(函数(a,b){
返回Math.abs(1-a)-Math.abs(1-b);
});
console.log('unbiased:'+arr);//unbiased:1.02,0.98,1.12,0.76,1.24,1.36,0.3,1.9
var-arr=[1.02,0.3,0.76,0.98,1.12,1.36,1.9,1.24];
//有偏,所以小于1的数字排序比大于1的数字高
//其中它们与1的差值相等
arr.sort(函数(a,b){
var da=1-a;
var-db=1-b;
da-=da<0?1e-14:0;
db-=db<0?1e-14:0;
返回Math.abs(da)-Math.abs(db);
});
console.log('biasted:'+arr);//biasted:0.98,1.02,1.12,0.76,1.24,1.36,0.3,1.9

只需更新@batscream answer的箭头函数实现

arr = arr.sort((a, b) => {
    return Math.abs(1-a) - Math.abs(1-b);
});
var-arr=[0.3,0.76,0.98,1.12,1.36,1.9];
arr=arr.sort((a,b)=>{
返回Math.abs(1-a)-Math.abs(1-b);
});

console.log(arr);
您是否有机会对此进行详细说明,并说明如何对其进行调整,使其优先选择小于1的值而不是大于1的值?