我想找到一个按最近值排序的算法。我想一个例子可以澄清我在说什么:
假设我们有一个这样的数组:
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]
}
希望我足够清楚。
感谢。
答案 0 :(得分:6)
您可以将Array#sort
与Math.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));