Preciso definir um nome de propriedade de objeto JS dinamicamente.
for(i=1; i<3; i++) {
var key = i+'name';
data = {
key : 'name1',
}
}
O resultado deve ser:
data = {
1name: 'name1'
2name: 'name1'
}
Preciso definir um nome de propriedade de objeto JS dinamicamente.
for(i=1; i<3; i++) {
var key = i+'name';
data = {
key : 'name1',
}
}
O resultado deve ser:
data = {
1name: 'name1'
2name: 'name1'
}
Respostas:
var jsonVariable = {};
for(var i=1; i < 3; i++) {
jsonVariable[i + 'name'] = 'name' + i;
}
Você precisará usar a []notação para definir chaves dinamicamente.
var jsonVariable = {};
for(i=1; i<3; i++) {
var jsonKey = i+'name';
jsonVariable[jsonKey] = 'name1';
}
Agora no ES6, você pode usar a sintaxe literal do objeto para criar chaves de objeto dinamicamente, basta agrupar a variável em []
var key = i + 'name';
data = {
[key] : 'name1',
}
Com o ECMAScript 6, você pode usar nomes de propriedades variáveis com a sintaxe literal do objeto, assim:
var keyName = 'myKey';
var obj = {
[keyName]: 1
};
obj.myKey;//1
Essa sintaxe está disponível nos seguintes navegadores mais recentes:
Edge 12+ (sem suporte para IE), FF34+, Chrome 44+, Opera 31+, Safari 7.1+
( https://kangax.github.io/compat-table/es6/ )
Você pode adicionar suporte a navegadores mais antigos usando um transpiler como o babel . É fácil transpilar um projeto inteiro se você estiver usando um empacotador de módulo, como rollup ou webpack .
Use uma variável como uma chave de objeto
let key = 'myKey';
let data = {[key] : 'name1'; }
Não importa de onde a variável vem. Principal coisa que temos um ... Defina o nome da variável entre colchetes "[..]".
var optionName = 'nameA';
var JsonVar = {
[optionName] : 'some value'
}
De acordo com o comentário do Sainath SR acima, pude definir um nome de propriedade de objeto js a partir de uma variável no Script do Google Apps (que ainda não suporta o ES6), definindo o objeto e definindo outra chave / valor fora do objeto:
var salesperson = ...
var mailchimpInterests = {
"aGroupId": true,
};
mailchimpInterests[salesperson] = true;