Динамически создавать карту объектов - PullRequest
0 голосов
/ 10 марта 2020

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

let var1 = 'source1'
let var2 = 'source2'
let data1=[data here]
let data2=[data here]
let table_specs ={
  var1: data1
  var2: data2
 }

Я хочу иметь возможность динамически назначать var1 и var2.

1 Ответ

1 голос
/ 10 марта 2020

Вы уже очень близки:

let var1 = 'source1';
let var2 = 'source2';
let data1= {"foo": "bar" /* data here */};
let data2= {"baz": "bat" /* data here */};
let table_specs ={
  [var1]: data1,
  [var2]: data2,
}

console.log(table_specs);

Ключевая часть - квадратные скобки ([]) вокруг свойств var1 и var2. Это известно как " вычисляемые имена свойств " и использует значения переменных в качестве имен свойств вместо обработки var1 и var2 как литерал имена свойств.

Значение table_specs будет:

{
  "source1": { "foo": "bar" },
  "source2": { "baz": "bat" }
}

Замена "foo", "bar" и т. д. c. данные с вашими собственными.

В качестве альтернативы

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

let var1 = 'source1';
let var2 = 'source2';
let data1= {"foo": "bar" /* data here */};
let data2= {"baz": "bat" /* data here */};
let table_specs ={};

table_specs[var1] = data1;
table_specs[var2] = data2;

Это даст тот же результат, хотя и в нескольких дополнительных строках кода. Преимущество в том, что у вас больше гибкости. Вы можете использовать al oop, например, если число «источников» неизвестно, например, когда вы пишете код, в то время как для вычисляемых имен свойств все еще требуется, чтобы вы знали точное количество свойств (которые должны оставаться согласованными ) даже если вы не знаете имен.

Например, вы можете добавить третий источник, если выполняется определенное условие:

if (some_condition) {
    table_specs[var3] = data3;
}

Вы не сможете сделать это с вычисленными именами свойств.

Обратите внимание, что вы можете смешивать и сочетать:

let var1 = 'source1';
let var2 = 'source2';
let var3 = 'source3';
let data1= {"foo": "bar" /* data here */};
let data2= {"baz": "bat" /* data here */};
let data3= {"biz": "buz" /* data here */};
let table_specs ={
    [var1]: data1,
    [var2]: data2,
};

if (some_condition) {
    table_specs[var3] = data3;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...