Алгоритм сортировки массива от ближайшего к дальнему по заданному номеру

1

Я пытаюсь (number: 5.6666, array: [-1, 9, 4, 10, 11, 0]) алгоритм в js для сортировки от ближайшего к дальнему по заданному числу, например (number: 5.6666, array: [-1, 9, 4, 10, 11, 0]) должно возвращать [4, 9, 10, 0, 11, -1] Любая идея, как подход к проблеме? Немного gotcha на самом деле мой массив массив массивов, и мне нужно сортировать по определенному ключу в объекте. В документах сказано, что следует использовать array.sort() с функцией сравнения, но я не понимаю, как реализовать эту функцию.

Теги:
arrays
algorithm
sorting

3 ответа

1
Лучший ответ

Функция sort() Array может принимать функцию:

[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 от цели), вы не можете гарантировать, что это произойдет первым. Если это имеет значение для вас, вам нужно добавить дополнительную логику для этого сценария.

  • 0
    Спасибо за такой полезный ответ.
1

Используйте array.sort и получите разницу в каждом номере от 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);
  • 0
    как использовать это, если у меня есть массив объектов, и нужно сортировать, например, по num ключа
  • 0
    сортировать по этому конкретному свойству, используя .map
Показать ещё 2 комментария
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)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню