Я получил следующие объекты с использованием AJAX и сохранил их в массиве:
var homes = [
{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": "162500"
}, {
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": "319250"
}, {
"h_id": "5",
"city": "New York",
"state": "NY",
"zip": "00010",
"price": "962500"
}
];
Как создать функцию для сортировки объектов по price
свойству в порядке возрастания или убывания , используя только JavaScript?
javascript
arrays
sorting
TomHankers
источник
источник
Ответы:
Сортировать дома по цене в порядке возрастания:
Или после версии ES6:
Некоторая документация может быть найдена здесь .
источник
string1.localeCompare(string2)
для сравнения строкlocaleCompare()
регистр не учитывается . Если вы хотите, чтобы с учетом регистра, вы можете использовать(string1 > string2) - (string1 < string2)
. Логические значения приводятся к целым числам 0 и 1 для вычисления разницы.localeCompare()
документация показывает, что вы можете явно указать, хотите ли вы учитывать регистр, числовую сортировку и другие параметры.Вот более гибкая версия, которая позволяет создавать повторно используемые функции сортировки и сортировки по любому полю.
источник
sort_by
выполняется в O (1) и возвращает функцию, используемую встроенной сортировкой (O (N log N)) для сравнения элементов в списке. Общая сложность O (n log n) * O (1), которая сводится к O (n log n), или такой же, как быстрая сортировка.var key = primer ? function (x) { return primer(x[field]); } : function (x) { return x[field]; }
[1,-1][+!!reverse]
выглядит круто, это ужасно. Если пользователь не может вызвать ваш метод должным образом, накажите его, а не пытайтесь каким-то образом понять его, несмотря ни на что.Чтобы отсортировать его, вам нужно создать функцию сравнения с двумя аргументами. Затем вызовите функцию сортировки с этой функцией сравнения следующим образом:
Если вы хотите отсортировать по возрастанию, переключите выражения на каждой стороне знака минус.
источник
для сортировки строк, если кому-то это нужно,
источник
Если у вас есть браузер, совместимый с ES6, вы можете использовать:
Разница между возрастающим и убывающим порядком сортировки является знаком значения, возвращаемого вашей функцией сравнения:
Вот рабочий фрагмент кода:
источник
Вы хотите отсортировать его в Javascript, верно? То, что вы хотите, это
sort()
функция . В этом случае вам нужно написать функцию сравнения и передать ееsort()
, так что-то вроде этого:Ваш компаратор берет один из каждого из вложенных хешей внутри массива и решает, какой из них выше, проверяя поле «цена».
источник
Я рекомендую GitHub: Array sortBy - лучшая реализация
sortBy
метода, использующего преобразование ШварцаНо сейчас мы собираемся попробовать этот подход Gist: sortBy-old.js .
Давайте создадим метод сортировки массивов, позволяющий упорядочивать объекты по какому-либо свойству.
Создание функции сортировки
Установка несортированных данных
Используй это
Расположите массив,
"date"
какString
Если вы хотите игнорировать регистр, установите
parser
обратный вызов:Если вы хотите преобразовать
"date"
поле какDate
тип:Здесь вы можете поиграть с кодом: jsbin.com/lesebi
Благодаря @Ozesh по его отзывам, проблема, связанная со свойствами с ложными значениями, была исправлена.
источник
var checkNaN = function (value) { return Number.isNaN(Number(value)) ? 0 : value; }
за ним следует: return function (array, o) { .... a = _getItem.call (o, a); a = checkNaN (a); b = _getItem.call (o, b); b = checkNaN (b); return o.desc * (a <b? -1: + (a> b)); });Используйте lodash.sortBy (инструкции, использующие commonjs, вы также можете просто поместить скрипт include-тега для cdn вверху вашего html)
В порядке убывания
По возрастанию
источник
const sortBy = require('lodash/sortBy'); let calendars = sortBy(calendarListResponse.items, cal => cal.summary);
import { orderBy } from 'lodash'; ... ... return orderBy ( rows, 'fieldName' ).reverse();
Этого можно было бы достичь с помощью простой однострочной функции сортировки valueof () . Запустите фрагмент кода ниже, чтобы увидеть демо.
источник
Я немного опаздываю на вечеринку, но ниже моя логика для сортировки.
источник
Хотя я знаю, что ОП хотел отсортировать массив чисел, этот вопрос был помечен как ответ на аналогичные вопросы, касающиеся строк. Для этого факта, приведенные выше ответы не рассматривают сортировку массива текста, где регистр важен. Большинство ответов принимают строковые значения и преобразуют их в верхний / нижний регистр, а затем сортируют так или иначе. Требования, которых я придерживаюсь, просты:
Я ожидаю,
[ A, a, B, b, C, c ]
но ответы выше возвращаютсяA, B, C, a, b, c
. Я на самом деле почесал голову над этим дольше, чем хотел (вот почему я публикую это в надежде, что это поможет по крайней мере еще одному человеку). В то время как два пользователя упоминаютlocaleCompare
функцию в комментариях для помеченного ответа, я не видел ее до тех пор, пока не наткнулся на функцию во время поиска. После прочтения документации String.prototype.localeCompare () я смог придумать следующее:Это говорит функции сортировать заглавные значения перед строчными. Вторым параметром в
localeCompare
функции является определение языка, но если вы оставите его,undefined
он автоматически определит язык для вас.Это работает так же и для сортировки массива объектов:
источник
Вы можете использовать
sort
метод JavaScript с функцией обратного вызова:источник
Вот кульминация всех ответов выше.
Проверка скрипки: http://jsfiddle.net/bobberino/4qqk3/
источник
Для сортировки массива вы должны определить функцию сравнения. Эта функция всегда будет отличаться в зависимости от желаемого шаблона или порядка сортировки (т. Е. По возрастанию или по убыванию).
Давайте создадим некоторые функции, которые сортируют массив по возрастанию или по убыванию, который содержит объектные или строковые или числовые значения.
Сортировка чисел (по алфавиту и по возрастанию):
Сортировка чисел (по алфавиту и по убыванию):
Сортировка чисел (по возрастанию):
Сортировка чисел (по номерам и по убыванию):
Как и выше, используйте методы sorterPriceAsc и sorterPriceDes для вашего массива с нужным ключом.
источник
Я также работал с некоторой оценкой и сортировкой нескольких полей:
Результат
источник
Хотя это немного излишне для простой сортировки одного массива, эта функция-прототип позволяет сортировать массивы Javascript по любому ключу в порядке возрастания или убывания, включая вложенные ключи , используя
dot
синтаксис.Применение:
Сортировка по вложенным свойствам с точечным синтаксисом или массивом:
Сортировка по нескольким ключам:
Вы можете раскошелиться на репо: https://github.com/eneko/Array.sortBy
источник
sortBy
лаконичного синтаксиса. Простой в использовании - даже с вложенными полями - при сохранении отличной читаемости кода. Спасибо!С помощью ECMAScript 6 ответ StoBor можно сделать еще более кратким:
источник
По убыванию цены:
В порядке возрастания цены:
источник
Если вы используете Underscore.js , попробуйте sortBy:
источник
Вот слегка измененная версия элегантной реализации из книги «JavaScript: хорошие части».
Примечание : Эта версия
by
İŞ стабильной . Он сохраняет порядок первой сортировки при выполнении следующей цепочки сортировки.Я добавил
isAscending
параметр к нему. Также преобразовал это вES6
стандарты и "более новые" хорошие части как рекомендовано автором.Вы можете сортировать по возрастанию, а также по убыванию и сортировать по цепочке по нескольким свойствам.
источник
{"first":"Curly","last":"Howard", "property" : {"id" : "1"}}
тип массива по идентификатору?by
с name = "property", nestedName = "id"Только для обычного массива значений элементов:
Для массива объектов:
источник
Создайте функцию и выполните сортировку на основе ввода, используя приведенный ниже код
источник
Вы можете использовать string1.localeCompare (string2) для сравнения строк
Обратите внимание , что
localCompare
в случае в чувствительнойисточник
Для сортировки по нескольким объектам поля. Введите имя вашего поля в
arrprop
массив, как["a","b","c"]
затем введите второй параметрarrsource
фактического источника, который мы хотим отсортировать.источник
Вам понадобятся две функции
Затем вы можете применить это к любому свойству объекта:
источник
Недавно я написал универсальную функцию для управления этим для вас, если вы хотите использовать его.
источник
источник
Привет, прочитав эту статью, я создал sortComparator для своих нужд, с возможностью сравнивать более одного атрибута json, и я хочу поделиться им с вами.
Это решение сравнивает только строки в порядке возрастания, но решение может быть легко расширено для каждого поддерживаемого атрибута: обратный порядок, другие типы данных, использование локали, приведение и т. Д.
и результат
и другой вид
с результатом
источник
Простой код:
источник
http://yazilimsozluk.com/sort-array-in-javascript-by-asc-or-desc
источник