Уничтожить массив в объектных ключах свойств
У меня есть массив значений, например:
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 }),{})