array.sort([compareFunction]) принимает дополнительную функцию, которая работает в качестве пользовательского компаратора
fruits.sort(function(a, b){
return a - b;
});
Если вы хотите отсортировать по убыванию
fruits.sort(function(a, b){
return b - a;
});
с помощью: MDN Array.prototype.sort docs
- Если
compareFunction(a, b)
меньше 0, сортировать а к более низким индексом, чем Ь, то есть в первом месте.
- Если
compareFunction(a, b)
возвращает 0, оставьте a и b без изменений по отношению друг к другу, но отсортированы по всем различным элементам. Примечание. Стандарт ECMAscript не гарантирует такого поведения, и, таким образом, не все браузеры (например, версии Mozilla, датированные как минимум 2003 годом).
- Если
compareFunction(a, b)
больше 0, сортируйте b до более низкого индекса, чем a.
compareFunction(a, b)
должно всегда возвращать одно и то же значение при задании определенной пары элементов a и b в качестве двух аргументов. Если противоречивые результаты возвращаются, то порядок сортировки не определен
В последнее время я делал некоторое функциональное программирование. Я оставлю этот раздел в качестве другого варианта для людей, которые хотят решить одну и ту же проблему по-разному.
Сначала у нас есть некоторые общие функции полезности. Это необходимо, когда мы хотим определить наши функции сортировки более высокого порядка asc
и desc
.
const sub = x => y => y - x;
const flip = f => x => y => f (y) (x);
const uncurry = f => (x,y) => f (x) (y);
const sort = f => xs => xs.sort(uncurry (f));
Теперь вы можете легко определить asc
и desc
с точки зрения sub
const asc = sort (flip (sub));
const desc = sort (sub);
Проверьте это
asc ([4,3,1,2]); //=> [1,2,3,4]
desc ([4,3,1,2]); //=> [4,3,2,1]
Вы все еще можете сделать заказ сортировки, используя sort (comparator) (someData)
// sort someData by `name` property in ascending order
sort ((a,b) => a.name - b.name) (someData); //=> ...
Может ли кто-нибудь сказать мне, почему '.sort()' выводит неверный результат? – void