Сортировать объект по ключу в порядке убывания

Для меня это простой, но самый болезненный вопрос.

Возьмем пример следующего фрагмента кода:

const test = {};
test[2] = 'value2';
test[1] = 'value1';
console.info(test);

Результат приведенного выше фрагмента:

{
  1: "value1",
  2: "value2"
}

Я хочу передать этот объект как есть со следующим результатом:

{
  2: "value2",
  1: "value1"
}

PS: Я попробовал Object.keys (тест) .sort () и Object.keys (тест) .reverse (), а затем связал его с функцией для воссоздания объекта, но, похоже, у меня ничего не работает.

Совершенно уверен, что это невозможно, потому что числовые свойства всегда перечислены в числовом порядке, не так ли? Но я думаю, что порядок свойств - это не то, от чего должен зависеть хороший код.

CertainPerformance 27.10.2018 09:01

Если вы хотите передать сам объект, не думайте, что это возможно, хотя это было бы возможно, если вы хотите передать сериализованную версию объекта. (хотя при десериализации, если то, что принимает, основано на JS, оно вернется в простой числовой порядок) Похоже, вам следует использовать вместо этого массив, возможно

CertainPerformance 27.10.2018 09:05

Object.keys (тест) .sort (). Reverse ()

hossein sedighian 27.10.2018 09:18

Он просто изменит ключи, но я хочу, чтобы ключ и значение были в ожидаемом формате.

Sahil Purav 27.10.2018 09:19

Вместо того, чтобы отправлять объект по вашему выбору, отправьте объект как есть и сделайте его так, как вам нужно, в методе, который будет его обрабатывать. В случае ассоциативного массива порядок всегда случайный. В качестве альтернативы преобразуйте ассоциативный массив в массив объектов и преобразуйте их в соответствии с требованиями вашей функции.

Mukund 27.10.2018 09:28

Вы не должны полагаться на упорядочение ключей объекта, и если ваши ключи являются просто целыми числами, почему бы в первую очередь не использовать массив? Просто вставьте свои значения в массив, и вы можете просто отменить его.

Vytautas Lozickas 27.10.2018 10:06

Все серверные языки предоставляют эту функцию. Разработчик (особенно Backend) обязательно подумает об этом в будущем. Я чувствую, что добавление этого вопроса сюда наверняка сэкономит чье-то время. Это мое мнение. Я зря потратил свои 3 часа :)

Sahil Purav 27.10.2018 15:23
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
7
2 102
2

Ответы 2

Это невозможно с положительными целочисленными ключами. Это может работать в большинстве браузеров (но, вероятно, не во всех) с неположительными целочисленными ключами: [-2], [.2], ['2 '] и т. д.

const obj = { '2 ': "value2", '1 ': "value1" };

console.info(obj);

console.info( JSON.stringify(obj, 0, 2).replace(/ ": "/g, '": "') );

Я проверяю, вы можете использовать что-то вроде этого, чтобы расширить свой ключ и значения на другой объект

{ключ: "", значение: ""}

const test = {};
test[2] = 'value2';
test[1] = 'value1';
test[4] = 'value4';

var r = Object.keys(test).sort().reverse()
console.info(r);

var sorted  = {}

//look like JS Sorted this ASC

  r.forEach(k => {
        sorted[k] = test[k]
    });

console.info(JSON.stringify(sorted));

// So use Array

var sorted =[]


  r.forEach(k => {
        sorted.push({"key":k ,"value": test[k]})
    });

console.info(JSON.stringify(sorted));

Другие вопросы по теме