Как переставить атрибуты объекта?

У меня есть такой объект:

user = {
  'a': 0,
  'b': 1,
  'c': 3,
  'd': 4
}

Я хочу изменить его свойства следующим образом:

user = {
  'c': 3,
  'a': 0,
  'b': 1,
  'd': 4
}

Я не хочу создавать новый объект, вместо этого я хочу переставить атрибуты существующего объекта.

Набор свойств в объекте действительно не имеет надежного упорядочивания. Обычно это основано на последовательности событий, которые добавляли свойства к объекту, но даже это очень хрупкое поведение, на котором можно основывать любую практику кодирования.

Pointy 12.11.2018 15:01

Если вам нужен определенный порядок, вы можете использовать дополнительный массив, чтобы упорядочить свойства в соответствии с вашими потребностями, а затем отсортировать свойства в данном объекте через этот массив после получения имен свойств через Object.keys().

Pointy 12.11.2018 15:02
"по каким-то причинам" - не могли бы вы рассказать, что это такое? Скорее всего, это xyproblem.info
jonrsharpe 12.11.2018 15:02

Сказать, что вы хотите, чтобы user.c располагался перед user.a, все равно что сказать, что вы хотите, чтобы document.getElementById располагался перед document.querySelector. В контексте объекта это не имеет смысла. Используйте массивы (возможно, объектов) для структурирования данных, если вам нужен порядок.

James 12.11.2018 15:26
Поведение ключевого слова "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
4
371
2

Ответы 2

Вы не можете определить порядок ключей в обычном объекте. Вместо этого вы можете преобразовать Object в Map.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

A Map object iterates its elements in insertion order — a for...of loop returns an array of [key, value] for each iteration.

var user = {a: 0, b: 1, c: 3, d: 4};
var uMap = new Map([['c', user.c], ['a', user.a], ['b', user.b], ['d', user.d]]);

Или вы можете превратить свой Object в Array и работать с ним. Обратной стороной этого подхода является то, что вы должны помнить правильную позицию индекса свойств / какое свойство соответствует какой позиции в массиве:

var user = {a: 0, b: 1, c: 3, d: 4};
var uArr = [user.c, user.a, user.b, user.d];

В объекте JavaScript вы не можете упорядочить пары ключ / значение. Они хранятся в собственном внутреннем формате, поэтому на упорядочение нельзя полагаться.

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

Надеюсь это поможет!

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