Вы уже очень близки:
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;
}