Как скопировать все поля объекта в переменные с одинаковыми именами? - PullRequest
0 голосов
/ 10 июня 2019

Объект JavaScript содержит набор пар ключ / значение.

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

Также возможно ли это в JavaScript ES5?

Например, если объект

var obj = {a: 'aaa', b: 'bbb'}

Тогда эта процедура должна создать двапеременные:

var a = 'aaa';
var b = 'bbb';

Ответы [ 3 ]

0 голосов
/ 10 июня 2019

Вы можете использовать уничтожение

 const obj = {a : "aaaa", b : "bbbb"};
 
 
 //use destructuring
 
const { a } = obj;

console.log(a);
0 голосов
/ 10 июня 2019
for (let [key, value] of Object.entries(object)) {
    window[key] = value;
}
0 голосов
/ 10 июня 2019

Если вы знаете ключи заранее, вы можете деструктурировать (только ES6):

const obj = { foo: 'foo', bar: 'bar' };
const { foo, bar } = obj;
console.log(foo);
console.log(bar);

Не рекомендуется, поскольку глобальные переменные неверны, но вы можете присвоить объекту window и затем ссылаться на его свойства как на отдельные переменные.Это можно сделать в ES5 с полифилом:

const obj = { foo: 'foo', bar: 'bar' };
Object.assign(window, obj);
console.log(foo);
console.log(bar);

Но имена динамических переменных, как правило, плохая идея.Лучше использовать только тот объект, который у вас изначально, если это вообще возможно.

Даже менее рекомендуется, но поскольку он отвечает на вопрос, вы можете eval (но, пожалуйста, не надо):

(() => {
  const obj = { foo: 'foo', bar: 'bar' };
  for (const [prop, val] of Object.entries(obj)) {
    eval(`var ${prop} = val`);
  }
  console.log(foo);
  console.log(bar);
})();

Вышесказанное также можно сделать в ES5, если нужно, но не нужно - это проблема X / Y

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