Деструктурирование объектов с помощью Spread

это должно быть довольно просто, но я не могу правильно понять синтаксис.

    var newObject = {a:1,b:2,c:"three"};
    var {...newObject} = newObject;
    console.log(a); // returns undefined

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

var {a,b,c} = newObject

но у меня есть несколько длинных массивов, и я не хочу вводить все свои переменные


person Peter Breen    schedule 26.10.2018    source источник
comment
Это невозможно - вы в основном ищете имена динамических переменных, которые ужасны и возможны только с плохими хаками, такими как eval   -  person CertainPerformance    schedule 26.10.2018
comment
Зачем вам нужно слишком много переменных? Вместо этого используйте цикл.   -  person Ele    schedule 26.10.2018
comment
Что не так с прямым доступом к значению объекта с помощью newObject.a?   -  person slider    schedule 26.10.2018
comment
Я использую переменные так, чтобы не зацикливаться (я не делаю одно и то же с каждой переменной). Я определенно могу получить прямой доступ к значению объекта, и это то, что я делаю сейчас, просто кажется неэффективным продолжать писать newObject снова и снова, поэтому все еще кажется полезным (но, конечно, не необходимым) делать то, что я пытаюсь сделать .   -  person Peter Breen    schedule 26.10.2018
comment
Ну, если вы получаете к нему доступ, так почему бы вам просто не перечислить их? Имеет смысл вместо того, чтобы создавать тонны неиспользуемых переменных, если это будет работать так, как вы этого хотели.   -  person epascarello    schedule 26.10.2018
comment
Если вы в конце концов ухудшите свой код, newObject все равно будет минимизирован. Просто упомянем, но совершенно не рекомендуем использовать оператор with-do — developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/   -  person Matthi    schedule 26.10.2018
comment
@Matthi Иногда полезно использовать with, он часто используется в шаблонизаторах. Если есть блок кода, который будет работать только со свойствами newObject, возможно, стоит посмотреть   -  person Dexygen    schedule 26.10.2018
comment
Я предполагаю, что в этом проекте меня больше заботит эффективность написания и читабельность кода, чем производительность во внешнем интерфейсе, поэтому мне кажется, что несколько дополнительных плавающих переменных меня вполне устраивают. Спасибо всем за идеи о том, действительно ли это хорошая идея, чтобы попытаться сделать это (я до сих пор не видел хорошего краткого способа сделать это)   -  person Peter Breen    schedule 26.10.2018
comment
Если вы используете так много переменных в области видимости, что предпочитаете не вводить все их имена, то вы, вероятно, идете в неправильном направлении.   -  person Patrick Roberts    schedule 26.10.2018


Ответы (1)


Вы не можете сделать это динамически без eval. Даже в этом случае вы, скорее всего, будете использовать имена переменных статически, это совершенно бесполезно. Вы также можете правильно деструктурировать:

let o = { a: 'a', b: 'b' };
let { a, b } = o;
console.log(a, b);

person Rafael    schedule 26.10.2018