javascript - 算法按给定数字从最近到最远对数组进行排序

标签 javascript arrays algorithm sorting

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

最佳答案

Arraysort() 函数可以带一个函数:

[1,2,3].sort((a, b) => /* do something */)

每次,您都应该返回一个值。负数表示 ab 之前。正数表示 ba 之前。 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 个数字与目标等距的情况下(在我的示例中,46 都与 1 相距目标),你不能保证哪个先出现。如果这对您很重要,您会想要添加一些额外的逻辑来处理该场景。

关于javascript - 算法按给定数字从最近到最远对数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48236623/

相关文章:

javascript - 子数组在数组中重复的次数 - JavaScript

c - 将指针存储到数组时哪里出错了?

javascript - 获取可变深度数组中的第一个数字数组

algorithm - 通过 3 个特定操作从 1 到 n 的高效算法

ruby - Codility 置换赋值

javascript - react 错误: Target Container is not a DOM Element

javascript - Stellar.js - 为垂直滚动网站配置偏移/对齐元素?

javascript - 如何查找用于与 USB 设备交互的函数

java - 将列表的字符串列表转换为整数列表

c - 快速排序分区