Есть массив:
[["1.243","red"],["1.242","green"],["1.2425","orange"],
["1.3","grey"],["1.35","grey"],["1.244","grey"]]
и число например 1.31
Нужно его отсортировать так, чтоб первые элементы были ближайшие к 1.31 и дальше по убывание близости.
let arr = [["1.243","red"],["1.242","green"],["1.2425","orange"],
["1.3","grey"],["1.35","grey"],["1.244","grey"]];
Сортировка:
arr.sort(function(a,b){
return Math.abs(Math.abs(a[0])-1.31) - Math.abs(Math.abs(b[0])-1.31);
});
Когда-то поднимался вопрос,нужно ли в функции sort возвращать 0 или 1,отвечал тут
var data = [
["1.243", "red"],
["1.242", "green"],
["1.2425", "orange"],
["1.3", "grey"],
["1.35", "grey"],
["1.244", "grey"]
];
function sortClosestTo(arr, num, numSelector) {
arr.sort((l, r) =>
Math.abs(num - numSelector(l) - Math.abs(numSelector(r) - num));
}
sortClosestTo(data, 1.31, (el) => +el[0]);
console.log(data);
Для отрицательных числах это так же рассчитывается верно:
var data = [
["1.243", "red"],
["-1.242", "green"],
["-1.27", "greens"],
["1.2425", "orange"],
["1.3", "grey"],
["-1.35", "grey"],
["1.244", "grey"]
];
function sortClosestTo(arr, num, numSelector) {
arr.sort((l, r) =>
Math.abs(numSelector(l) - num) - Math.abs(numSelector(r) - num));
}
sortClosestTo(data, -1.31, (el) => +el[0]);
console.log(data);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Почему unexpected token '(' во второй функции?
Есть массив абзацов и картинок текущей страницыВсе картинки внутри абзацов
При считывании информации с БД в textarea выводит отступы в начало строки