Javascript как переименовать ключ объекта, сохраняя значение и позицию - PullRequest
0 голосов
/ 19 апреля 2020

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

let obj = {one: 1, two: 2, three: 3, eight: 4, five: 5}

мне нужно переименовать eight с four, сохраняя то же значение и ту же позицию. Я сделал это:

let obj = {one: 1, two: 2, three: 3, eight: 4, five: 5}
let tmp = obj[eight];
delete obj.eight;
obj.four = tmp;

, но, очевидно, он вернется: {one: 1, two: 2, three: 3, five: 5, four: 4} вместо {one: 1, two: 2, three: 3, four: 4, five: 5}.

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

1 Ответ

1 голос
/ 20 апреля 2020

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

let obj = {one: 1, two: 2, three: 3, eight: 4, five: 5};

obj = Object.keys(obj)
  .reduce((a, key) => ({
    ...a,
    [key === 'eight' ? 'four' : key]: obj[key],
  }), {});

console.log(obj); // prints {one: 1, two: 2, three: 3, four: 4, five: 5}

Если этого недостаточно для решения проблемы, которую вы решаете, я полагаю, вы храните свои данные по-другому.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...