算法按给定数字从最接近到最远的方式排序数组

时间:2018-01-13 03:16:36

标签: javascript arrays algorithm sorting

我尝试在js中使用给定数字从最近到最远的方式进行排序,例如(number: 5.6666, array: [-1, 9, 4, 10, 11, 0])应该返回[4, 9, 10, 0, 11, -1]。是否知道如何处理问题?实际上我的数组是对象数组,我需要按对象中的某个键进行排序。在文档中说,应该使用带有比较功能的array.sort(),但我不明白如何实现这个功能。

3 个答案:

答案 0 :(得分:1)

使用sort,您可以检查他们与您的号码的距离。



var num = 5.666
var arr = [-1, 9, 4, 10, 11, 0]

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

console.log(arr)




答案 1 :(得分:1)

使用array.sort并从给定的输入值中获取每个数字的差异



var inputArray = [-1, 9, 4, 10, 11, 0],
  input = 5;

var closest = inputArray.sort(function(a, b){
    return Math.abs(input-a) - Math.abs(input-b);
});
console.log(closest);




答案 2 :(得分:1)

sort()的{​​{1}}功能可以起作用:

Array

每次都应该返回一个值。否定数字意味着[1,2,3].sort((a, b) => /* do something */) 出现在a之前。正数表示b之前的ba意味着他们是平等的。

如果您希望距离数字,则需要0的绝对值。假设对象上的键是Math.abs(),您可以将它们放在一起:

value

我使用了一些ES6解构来通过在参数中拉出const target = 5; const values = [{ value: -100 }, { value: 1 }, { value: 4 }, { value: 6 }, { value: 10 }]; const result = values.sort(({ value: a }, { value: b }) => Math.abs(target - a) - Math.abs(target - b)); console.log(result);来使它更清洁。

如果您想保留剩余的值(而不是对象),您可以在事后(或之前)使用value

注意,如果2个数字与目标等距(在我的示例中,map()4都距离目标6,则无法保证这将是第一次。如果对您很重要,那么您需要添加一些额外的逻辑来处理该场景。