我尝试在js
中使用给定数字从最近到最远的方式进行排序,例如(number: 5.6666, array: [-1, 9, 4, 10, 11, 0])
应该返回[4, 9, 10, 0, 11, -1]
。是否知道如何处理问题?实际上我的数组是对象数组,我需要按对象中的某个键进行排序。在文档中说,应该使用带有比较功能的array.sort()
,但我不明白如何实现这个功能。
答案 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
之前的b
。 a
意味着他们是平等的。
如果您希望距离数字,则需要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
,则无法保证这将是第一次。如果对您很重要,那么您需要添加一些额外的逻辑来处理该场景。