Уничтожить массив в объектных ключах свойств

У меня есть массив значений, например:

const arr = [1,2,3];

Можно ли использовать деструктуризацию для создания следующего вывода? Если нет, то какой простой способ я могу сделать это в ES6 (или позже)?

const obj = {
    one: 1,
    two: 2,
    three: 3
};

Я пробовал это, но я думаю, это не работает, поскольку это синтаксис для вычисляемых ключей:

const arr = [1,2,3];
const obj = {
  [one, two, three] = arr
};

Ответ 1

Я не верю, что существует какое-либо структурирующее/деструктурирующее решение, чтобы сделать это за один шаг, нет. Я хотел что-то подобное в этом вопросе. Похоже, что старое предложение := strawman не имеет ног в новом списке предложений, поэтому я не думаю, что сейчас есть что-то особенное.

Этот ответ показывает очень аккуратную двухшаговую версию.

Но если это два шага, вы также можете использовать простой инициализатор объекта:

const arr = [1,2,3];
const obj = {
  one: arr[0],
  two: arr[1],
  three: arr[2]
};
console.log(obj);

Ответ 2

Вы можете назначить деструктурирование не только для переменных, но и для существующих объектов:

const arr = [1,2,3], o = {};    
({0:o.one, 1:o.two, 2:o.three} = arr);

Это работает без каких-либо дополнительных переменных и менее повторяется. Тем не менее, это также требует двух шагов, если вы очень подробно относитесь к этому.

Я не уверен, помогает ли это, поскольку вы упомянули вычисленные свойства?!

Ответ 3

С помощью деструктурирования вы можете создавать новые переменные или назначать их существующим переменным/свойствам. Однако нельзя объявить и переназначить одно и то же утверждение.

const arr = [1, 2, 3],
    obj = {};

[obj.one, obj.two, obj.three] = arr;
console.log(obj);
// { one: 1, two: 2, three: 3 }

Ответ 4

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

Учитывая массив строк: a = ['one', 'two', 'three'] Что такое хороший не-вложенный способ, не связанный с циклом получения этого результирующего словаря: b = {one: 'one', two: 'two', three: 'three'}?

const b = a.map(a=>({ [a]: a })).reduce((p, n)=>({ ...p, ...n }),{})