Я получил массив (см. Ниже для одного объекта в массиве), который мне нужно отсортировать по имени, используя JavaScript. Как мне это сделать?
var user = {
bio: null,
email: "user@domain.com",
firstname: "Anna",
id: 318,
lastAvatar: null,
lastMessage: null,
lastname: "Nickson",
nickname: "anny"
};
javascript
Джонатан Кларк
источник
источник
Ответы:
Предположим, у вас есть массив
users
. Вы можете использоватьusers.sort
и передать функцию, которая принимает два аргумента и сравнить их (компаратор)Должно вернуться
В нашем случае, если два элемента,
a
иb
мы хотим сравнитьa.firstname
иb.firstname
Пример:
Этот код будет работать с любым типом.
Обратите внимание, что в «реальной жизни» ™ вы часто хотите игнорировать регистр, правильно сортировать диакритические знаки, странные символы, такие как ß и т. Д. При сравнении строк, поэтому вы можете захотеть использовать
localeCompare
. Смотрите другие ответы для ясности.источник
localeCompare
.Кратчайший код с ES6!
Базовая поддержка String.prototype.localeCompare () универсальна!
источник
Что-то вроде этого:
источник
'a'>'A' //true
'z'>'a' //true
'A'>'z' //false
'Zebra'
выше, чем строка'apple'
, что она будет делать, если вы не используете.toLowerCase()
.'Z' < 'a' // true
и'z' < 'a' // false
Если сравнивать строки содержат символы Юникода вы можете использовать
localeCompare
функцию изString
класса , как в следующем:источник
users.sort((a, b) => a.name.localeCompare(b.name))
Милый маленький ES6 один лайнер:
источник
Мы можем использовать localeCompare, но нам также необходимо проверить ключи на наличие значений Falsey
Код ниже не будет работать, если в одной записи отсутствует lname.
Таким образом, мы должны проверить значение Falsey, как показано ниже
ИЛИ
мы можем использовать lodash, это очень просто. Он обнаружит возвращенные значения, т.е. число или строку, и выполнит сортировку соответственно.
https://lodash.com/docs/4.17.5#sortBy
источник
underscorejs предлагает очень хорошую функцию _.sortBy:
или вы можете использовать пользовательскую функцию сортировки:
источник
sortBy
Обнаруживает ли возвращаемые значения строки и выполняет ли сортировку по алфавиту? СпасибоВ случае, если мы сортируем имена или что-то со специальными символами, такими как ñ или áéíóú (обыкновенные по-испански), мы можем использовать параметры params locales ( в данном случае es для испанского языка) и такие параметры :
Официальные варианты локали можно найти здесь: iana , es (испанский), de (немецкий), fr (французский). О чувствительности базовых средств:
источник
По сути, вы можете сортировать массивы с помощью метода sort, но если вы хотите отсортировать объекты, вам нужно передать функцию для сортировки метода массива, поэтому я приведу пример использования вашего массива.
источник
else
быть удалены? В противном случае этоreturn 0
никогда не будет прочитаноВдохновленный этим ответом,
источник
Более компактная запись:
источник
sign(f(a, b)) =-sign(f(b, a))
(для a = b)a.firstname == b.firstname
следует использовать===
для полнотытакже для сортировки asec и desc, вы можете использовать это: предположим, у нас есть переменная SortType, которая задает сортировку по возрастанию или по убыванию, которую вы хотите:
источник
Обобщенная функция может быть написана как ниже
Вы можете передать следующие параметры
источник
пытаться
Показать фрагмент кода
источник
[9,8,7,6,5,1,2,3].sort((a,b) => a<b ? -1 : 1)
Вы можете использовать это для объектов
источник
Проще говоря, вы можете использовать этот метод
источник
Вы можете использовать метод встроенного массива -
sort
. Этот метод принимает метод обратного вызова в качестве параметраКлючевые моменты, которые следует отметить для понимания этого кода.
myCustomSort
должен возвращать +1 или -1 для каждой пары элементов (из входного массива) сравнения.toLowerCase()
/toUpperCase()
в пользовательском методе обратного вызова сортировки, чтобы различие в регистре не влияло на правильность процесса сортировки.Я надеюсь, что это достаточно четкое объяснение. Не стесняйтесь комментировать, если вы думаете, нужна дополнительная информация.
Ура!
источник
Поместил верхние ответы в прототип для сортировки по ключу.
источник
Вы можете использовать что-то подобное, чтобы избавиться от чувствительности к регистру
источник
Моя реализация прекрасно работает в старых версиях ES:
источник
Просто для записи, если вы хотите иметь именованную функцию сортировки, синтаксис выглядит следующим образом:
Обратите внимание, что следующее не работает:
источник