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

Squ*_*Cat 4 javascript arrays sorting

我需要对一组值进行排序.

var arr = [0.3, 0.76, 0.98, 1.12, 1.36, 1.9];
Run Code Online (Sandbox Code Playgroud)

哪个值最接近1,哪个(在上面的例子中)会导致:

[0.98, 1.12, 0.76, 1.36, 0.3, 1.9];
Run Code Online (Sandbox Code Playgroud)

我知道通过使用自定义排序功能.

arr.sort(function(a, b){
    return b - a;
});
Run Code Online (Sandbox Code Playgroud)

我可以控制如何sort()工作,但是,我不明白我将如何设计自定义功能,以便它以所需的方式工作.

也许有人可以开导我.

Bat*_*eam 16

只需检查他们与1的距离.

arr.sort(function(a, b){
    return Math.abs(1-a) - Math.abs(1-b);
});
Run Code Online (Sandbox Code Playgroud)

只是详细说明,它计算两个数字的距离,即1

  • a=-10并且b=4,距离分别为11和3.该函数返回一个正数,因此4在排序数组中位于-10之前.
  • 对于a=-1b=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));
});
Run Code Online (Sandbox Code Playgroud)