我试图在 js
中提出算法,用于按给定数字从最近到最远进行排序,例如 (number: 5.6666, array: [-1, 9, 4, 10, 11, 0])
应该返回 [4, 9, 10, 0, 11, -1]
。知道如何解决这个问题吗?一个小问题实际上我的数组是对象数组,我需要按对象中的某个键排序。在文档中说,应该使用带有比较功能的array.sort()
,但我不明白如何实现这个功能。
最佳答案
Array
的sort()
函数可以带一个函数:
[1,2,3].sort((a, b) => /* do something */)
每次,您都应该返回一个值。负数表示 a
在 b
之前。正数表示 b
在 a
之前。 0
表示它们相等。
如果您想要与数字的距离,您需要绝对值,使用 Math.abs()
。假设对象上的键是 value
,你可以把它们放在一起:
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);
我使用了一些 ES6 解构,通过在参数中提取 value
使其更清晰。
如果您只想保留值(而不是对象),您可以在事后(或事前)使用 map()
。
请注意,在 2 个数字与目标等距的情况下(在我的示例中,4
和 6
都与 1
相距目标),你不能保证哪个先出现。如果这对您很重要,您会想要添加一些额外的逻辑来处理该场景。
关于javascript - 算法按给定数字从最近到最远对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48236623/