按最接近的值排序数组

时间:2016-06-06 10:41:47

标签: javascript arrays

我想找到一个按最近值排序的算法。我想一个例子可以澄清我在说什么:

假设我们有一个这样的数组: var arr = [10,45,69,72,80];var num = 73;

我想要的是一个像这样返回这个数组的函数。

function orderByClosest(arr, num){
  //enter code here
  return arr; //and arr = [72,69,80,45,10]
}

希望我足够清楚。

感谢。

2 个答案:

答案 0 :(得分:6)

您可以将Array#sortMath.abs()一起使用。

arr.sort((a, b) => Math.abs(a - num) - Math.abs(b - num));

为旧浏览器使用ES5语法

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

要考虑负数,请不要使用Math.abs()



var arr = [10, 45, 69, 72, 80];
var num = 73;

var result = arr.sort((a, b) => Math.abs(a - num) - Math.abs(b - num));;

console.log(result);




答案 1 :(得分:1)

对于更多数据,我建议使用Sorting with map



function orderByClosest(list, num) {
    // temporary array holds objects with position and sort-value
    var mapped = list.map(function (el, i) {
        return { index: i, value: Math.abs(el - num) };
    });

    // sorting the mapped array containing the reduced values
    mapped.sort(function (a, b) {
        return a.value - b.value;
    });

    // return the resulting order
    return mapped.map(function (el) {
        return list[el.index];
    });
}

console.log(orderByClosest([72, 69, 80, 45, 10], 73));
console.log(orderByClosest([72, 69, 80, 45, 10], 40));