Cómo establecer una key de matriz JSON en array.push en JavaScript

Estoy creando un código JS, donde necesito establecer una variable como key en una matriz JSON con Javascript array.push() :

 var test = 'dd'+questNumb; window.voiceTestJSON.push({test:{"title":""}, "content":{"date":""}}); 

Donde questNumb es otra variable. Al hacer ese código, la parte en la que escribo la variable de test simplemente se convierte en la key "test" , por lo que no tengo idea de llevar esto a wok. ¿Como puede ser? ¡Gracias!

Si quiere variables como keys, necesita corchetes:

 var object = {}; object['dd'+questNumb] = {"title":""}; object["content"] = {"date":""}; //Or object.content, but I used brackets for consistency window.voiceTestJSON.push(object); 

Deberías hacer algo como esto:

 var test = "dd" + questNumb, obj = {content: {date: ""}}; // Add the attribute under the key specified by the 'test' var obj[test] = {title: ""}; // Put into the Array window.voiceTestJSON.push(obj); 

(En primer lugar, no tiene una matriz JSON, tiene un object JavaScript. JSON es una representación de cadena de datos con una syntax que se parece a la syntax literal de object de JavaScript).

Lamentablemente, cuando utiliza la syntax literal del object de JavaScript para crear un object, no puede usar variables para establecer nombres de propiedad dynamics. Primero debe crear el object y luego agregar las properties usando la syntax obj[propName] :

 var test = "dd" + questNumb, myObj = { "content" : {"date":""} }; myObj[test] = {"title" : ""}; window.voiceTestJSON.push(myObj); 
 {test:{"title":""}, "content":{"date":""}} 

este es un object JS. Entonces estás empujando un object en la matriz voiceTestJSON.

A diferencia de JSON, los nombres de las properties del object JS se pueden escribir con o sin comillas.

Lo que quieres hacer se puede lograr así:

 var test = 'dd'+questNumb; var newObject = {"content":{"date":""}}; //this part does not need a variable property name newObject[test] = {"title":""}; 

De esta forma está configurando la propiedad con el nombre que figura en la testing para {"title": ""}.