Come impostare un nome di proprietà dell'oggetto JS da una variabile


178

Ho bisogno di impostare dinamicamente un nome di proprietà dell'oggetto JS.

for(i=1; i<3; i++) {
    var key  = i+'name';

    data = {
        key : 'name1',
    }
}

Il risultato dovrebbe essere:

data = {
    1name: 'name1'
    2name: 'name1'
}

Se sono sequenziali, perché non usi un array?
Epascarello,

Voglio sapere chi di voi ha colpito la freccia sbagliata. Dai, confessa.
Charles,

Risposte:


194
var jsonVariable = {};
for(var i=1; i < 3; i++) {
  jsonVariable[i + 'name'] = 'name' + i;        
}

4
La risposta di Musa di seguito inoltre spiega correttamente che l'uso della notazione [] è in realtà l'unico modo per farlo.
Dennis Plucinik,

1
Inoltre, la risposta di @ ChilNut in basso ora descrive il modo più semplice per farlo utilizzando ES6
rambossa,

1
In realtà, con la nuova sintassi ciò che OP sta cercando di ottenere sarà possibile solo se il limite del loop è hardcoded e piccolo.
Musa,

168

Dovrai usare la []notazione per impostare le chiavi in ​​modo dinamico.

var jsonVariable = {};
for(i=1; i<3; i++) {        
 var jsonKey  = i+'name';
 jsonVariable[jsonKey] = 'name1';

}

Ora in ES6 è possibile utilizzare la sintassi letterale dell'oggetto per creare chiavi dell'oggetto dinamicamente, semplicemente racchiudendo la variabile []

var key  = i + 'name';
data = {
    [key] : 'name1',
}

3
jsonVariable = {}; non deve essere inizializzato all'interno del ciclo for.
chiusura

Inoltre stai rendendo jsonVariable globale qui
Dennis Plucinik il

130

Con ECMAScript 6, è possibile utilizzare nomi di proprietà variabili con la sintassi letterale dell'oggetto, in questo modo:

var keyName = 'myKey';
var obj = {
              [keyName]: 1
          };
obj.myKey;//1

Questa sintassi è disponibile nei seguenti browser più recenti:

Edge 12+ (nessun supporto IE), FF34 +, Chrome 44+, Opera 31+, Safari 7.1+

( https://kangax.github.io/compat-table/es6/ )

Puoi aggiungere supporto ai browser più vecchi usando un transpiler come babel . È facile traspilare un intero progetto se si utilizza un bundle di moduli come rollup o webpack .


2
Grazie per aver aggiunto la fantastica sintassi ES6
rambossa,

Senza ES6 non riesco a definire var payload = {dynamicKey: val}, devo fare var payload = {} e payload [variabileNome] = val.
Sainath SR,

23

Questo è il modo di impostare dinamicamente il valore

var jsonVariable = {};
for (var i = 1; i < 3; i++) {
    var jsonKey = i + 'name';
    jsonVariable[jsonKey] = 'name' + i;
}

20

Utilizzare una variabile come chiave oggetto

let key = 'myKey';

let data = {[key] : 'name1'; }

Vedi Come iterete sul tuo oggetto qui


Potete per favore elaborare un po 'di più per far sapere agli altri perché questa potrebbe essere una soluzione?
phaberest

Le informazioni che hai aggiunto vanno bene, ma non dare mai una risposta con solo codice;)
phaberest

7

Non importa da dove provenga la variabile. La cosa principale ne abbiamo una ... Imposta il nome della variabile tra parentesi quadre "[..]".

var optionName = 'nameA';
var JsonVar = {
[optionName] : 'some value'
}

Funziona bene, mi chiedo se funziona in tutti i browser / versioni
Mercury,

1
jsonVariable = {}
for(i=1; i<3; i++) {        
   var jsonKey  = i+'name';
   jsonVariable[jsonKey] = 'name1'
}

questo sarà simile a

    jsonVariable = {
    1name : 'name1'
    2name : 'name1'
}

0

Sulla falsariga del commento di Sainath SR sopra, sono stato in grado di impostare un nome di proprietà dell'oggetto js da una variabile in Google Apps Script (che non supporta ancora ES6) definendo l'oggetto e quindi definendo un'altra chiave / valore al di fuori dell'oggetto:

var salesperson = ...

var mailchimpInterests = { 
        "aGroupId": true,
    };

mailchimpInterests[salesperson] = true;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.