Если у меня есть объект JavaScript, такой как:
var list = {
"you": 100,
"me": 75,
"foo": 116,
"bar": 15
};
Есть ли способ сортировки свойств по значению? Так что я в конечном итоге
list = {
"bar": 15,
"me": 75,
"you": 100,
"foo": 116
};
javascript
sorting
properties
object
Стирпайк
источник
источник
Object.entries
основанный на едва проголосованном ответе, который является самым чистым и наиболее читаемым современным состоянием после ES2017: stackoverflow.com/a/37607084/245966Ответы:
Переместите их в массив, отсортируйте этот массив, а затем используйте этот массив для своих целей. Вот решение:
Получив массив, вы можете перестроить объект из массива в том порядке, который вам нравится, и таким образом добиться именно того, что вы намеревались сделать. Это будет работать во всех известных мне браузерах, но будет зависеть от особенностей реализации и может сломаться в любое время. Вы никогда не должны делать предположения о порядке элементов в объекте JavaScript.
источник
keys()
поддерживается только IE9 + (и другими современными браузерами), если это вызывает озабоченность. Такжеkeys()
исключает перечислимые свойства из цепочки прототипов элементов (в отличие от ...), но обычно это более желательно._.pairs
превращает объект в [[key1, value1], [key2, value2]]. Тогда назовите сортировку по этому вопросу. Тогда призовите_.object
это, чтобы повернуть это назад.Мы не хотим дублировать всю структуру данных или использовать массив, где нам нужен ассоциативный массив.
Вот еще один способ сделать то же самое, что и Бонна:
источник
keysSorted
это массив! Не объект!.map(key => list[key]);
в конец сортировки, он вернет весь объект, а не только ключВаши объекты могут иметь любое количество свойств, и вы можете выбрать сортировку по любому желаемому свойству объекта, номеру или строке, если вы поместите объекты в массив. Рассмотрим этот массив:
сортировать по дате рождения
Сортировать по имени
http://jsfiddle.net/xsM5s/16/
источник
substr
из первого символа; ещеDiana
иDebra
иметь неопределенный порядок. Кроме того, вашbyDate
вид на самом деле используетnum
, а неborn
.x.localeCompare(y)
localCompare
выглядит очень полезной функцией! Просто отметьте, что он не будет поддерживаться в каждом браузере - IE 10 и менее, Safari Mobile 9 и менее.Для полноты картины эта функция возвращает отсортированный массив свойств объекта:
Jsfiddle с кодом выше здесь . Это решение основано на этой статье .
Обновленная скрипка для сортировки строк находится здесь. Вы можете удалить оба дополнительных преобразования .toLowerCase () из него для сравнения строк с учетом регистра.
источник
ECMAScript 2017 вводит
Object.values / Object.entries
. Как следует из названия, первое объединяет все значения объекта в массив, а второе превращает весь объект в массив[key, value]
массивов; Эквивалент Pythondict.values()
иdict.items()
.Эти функции значительно упрощают сортировку любого хэша в упорядоченный объект. На данный момент их поддерживает только небольшая часть платформ JavaScript , но вы можете попробовать это на Firefox 47+.
источник
Sorting JavaScript Object by property value
? Я думаю, вы неправильно поняли вопрос, поскольку вам нужно изменить исходный объект, а не создавать из него новый массив.«Стрелки» версия @marcusR «s ответа для справки
ОБНОВЛЕНИЕ: апрель 2017 г. - возвращает отсортированный
myObj
объект, определенный выше.Попробуй это здесь!
ОБНОВЛЕНИЕ: октябрь 2018 - версия Object.entries
Попробуй это здесь!
источник
var myObj = {"1": {"Value": 40}, "2": {"Value": 10}, "3": {"Value": 30}, "4": {"Value": 20}};
entries
. Согласно стандарту, объект - это неупорядоченный набор свойств . Что ж, это означает, что если вы пытаетесь создать новый объект после сортировки его по значению свойства или чему-либо еще, порядок ключей свойства снова становится неопределенным. Например, Chrome по умолчанию упорядочивает ключи свойств, поэтому каждая попытка упорядочить их по-другому бесполезна. Ваш единственный шанс - получить «индекс», основанный на ваших предпочтениях при оформлении заказа, и соответственно пройтись по оригинальному объекту.sort()
наObject.entries()
Объекты JavaScript неупорядочены по определению (см. Спецификацию языка ECMAScript , раздел 8.6). Спецификация языка даже не гарантирует, что, если вы дважды итерируете свойства объекта подряд, они будут появляться в том же порядке во второй раз.
Если вам нужно упорядочить вещи, используйте массив и метод Array.prototype.sort.
источник
Хорошо , как вы знаете, в javascript есть функция sort () для сортировки массивов, но ничего для объекта ...
Таким образом, в этом случае нам нужно каким-то образом получить массив ключей и отсортировать их, вот почему apis дает вам объекты в массиве большую часть времени, потому что Array имеет больше встроенных функций для работы с ними, чем в любом случае литерал объекта, быстрое решение заключается в использовании Object.key, который возвращает массив ключей объекта, я создаю ниже функцию ES6, которая выполняет эту работу за вас, она использует встроенные функции sort () и redu () в javascript:
И теперь вы можете использовать это так:
Проверьте sortedMyObject, и вы можете увидеть результат, отсортированный по ключам следующим образом:
Также, таким образом, главный объект не будет затронут, и мы фактически получим новый объект.
Я также создаю изображение ниже, чтобы сделать шаги функции более понятными, на случай, если вам нужно немного изменить его, чтобы он работал по-вашему:
источник
c: 3
наc: 13
и вы увидите, что он развалится.источник
Обновление с ES6: если у вас возникли проблемы с сортировкой объекта для итерации (поэтому я думаю, вы хотите отсортировать свойства объекта), вы можете использовать объект Map .
Вы можете вставить свои пары (ключ, значение) в отсортированном порядке, и тогда выполнение
for..of
цикла гарантирует, что они будут в том порядке, в котором вы их вставилиисточник
for-in
илиObject.keys
, но это определяется уважатьсяObject.getOwnPropertyNames
и другими новыми методами для доступа к имени свойства массивов. Так что это еще один вариант.Map
вас действительно есть структура данных, которая может хранить в отсортированном порядке (сортировать ваши данные, проходить по ним и сохранять их на карте), где вы не гарантируете, что с объекты.Underscore.js или Lodash.js для расширенных массивов или сортировки объектов
демонстрация
источник
Очень коротко и просто!
источник
Я следую решению, данному slebetman (прочитайте его для всех деталей), но скорректировано, так как ваш объект не является вложенным.
источник
Сортировать значения без нескольких циклов for (для сортировки по ключам изменить индекс в обратном вызове sort на «0»)
источник
Это может быть простой способ обращаться с ним как с реальным упорядоченным объектом. Не уверен, насколько это медленно. также может быть лучше с циклом while.
И тогда я нашел эту функцию инвертирования от: http://nelsonwells.net/2011/10/swap-object-key-and-values-in-javascript/
Так
источник
output = [{p: 8}, {c: 2}, {b: 1}, {g: 1}]
источник
На всякий случай, кто-то ищет сохранение объекта (с ключами и значениями), используя ссылку на код @Markus R и комментарий @James Moran, просто используйте:
источник
map
,forEach
было бы лучшеВывод:
источник
много похожих и полезных функций: https://github.com/shimondoodkin/groupbyfunctions/
источник
Объект отсортирован по значению (DESC)
источник
Вот еще один пример:
источник
источник
Машинопись
Следующая функция сортирует объект по значению или по свойству значения. Если вы не используете TypeScript, вы можете удалить информацию о типе, чтобы преобразовать ее в JavaScript.
Применение
Порядок ключей в объекте JavaScript не гарантируется, поэтому я сортирую и возвращаю результат как
Map
объект, который сохраняет порядок сортировки.Если вы хотите преобразовать его обратно в объект, вы можете сделать это:
источник
input - это объект, output - это объект, использующий встроенную библиотеку lodash & js, с опцией по убыванию или по возрастанию и не изменяющий объект ввода
например, ввод и вывод
Реализация
источник
источник
мое решение с сортировкой:
источник
источник
Еще один способ решить эту проблему:
// res будет иметь массив результатов
источник
Спасибо и продолжайте отвечать @Nosredna
Теперь, когда мы понимаем, что объект нужно преобразовать в массив, затем сортируем массив. это полезно для сортировки массива (или преобразованного объекта в массив) по строке:
источник
Попробуй это. Даже ваш объект не имеет свойства, на основе которого вы пытаетесь отсортировать, также будет обрабатываться.
Просто позвоните, отправив свойство с объектом.
источник