Вопрос:
У меня
var obj = {‘b’: 2, ‘c’: 3};
И я хотел бы добавить свойство в начале (а не в конце) этого объекта:
var obj = {‘a’: 1, ‘b’: 2, ‘c’: 3};
Есть ли чистый способ сделать это?
Лучший ответ:
Объекты JavaScript неупорядочены. Нет начала или конца. Если вы хотите заказать, используйте массив.
var arr = [ { key: ‘b’, value: 2 }, { key: ‘c’, value: 3 } ];
Затем вы можете добавить его перед unshift:
arr.unshift({ key: ‘a’, value: 1 }); Ответ №1
Вы также можете использовать Object.assign() в ES6 (ES2015 +).
let obj = {‘b’: 2, ‘c’: 3}; Object.assign({a: 1}, obj); // Object {a: 1, b: 2, c: 3} Ответ №2
Это можно сделать, используя функцию lodash, например:
var myObj = _.merge({ col1: ‘col 1’, col2: ‘col 2’}, { col3: ‘col 3’, col4: ‘col 4’ });
Ваш последний объект будет выглядеть следующим образом:
{ col1: ‘col 1’, col2: ‘col 2’, col3: ‘col 3’, col4: ‘col 4’ }
Как уже упоминалось, нет гарантии, что порядок ключей в объекте останется неизменным, в зависимости от того, что вы с ним делаете. Но, если вы выполняете слияние как свой последний шаг, вы должны быть в порядке. Обратите внимание: функция “merge” создаст совершенно новый объект, он не изменит ни один из объектов, которые вы передаете в него.
Ответ №3
Что сработало для меня, так это использовать временный объект для хранения элементов в нужном порядке.
Например:
var new_object = {}; new_object[name] = value; // The property we need at the start for (var key in old_object) { // Looping through all values of the old object new_object[key] = old_object[key]; delete old_object[key]; } old_object = new_object; // Replacing the old object with the desired one