Как установить ключ массива JSON на array.push на JavaScript - PullRequest
4 голосов
/ 05 января 2012

Я делаю некоторый код JS, где мне нужно установить переменную в качестве ключа в массиве JSON с Javascript array.push():

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

Где questNumb - другая переменная. При выполнении этого кода, часть, в которой я просто записываю переменную test, просто превращается в ключ "test", поэтому я не имею ни малейшего представления, как это сделать. Как это могло произойти? Спасибо!

Ответы [ 4 ]

5 голосов
/ 05 января 2012

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

var object = {};
object['dd'+questNumb] = {"title":""};
object["content"] = {"date":""};  //Or object.content, but I used brackets for consistency
window.voiceTestJSON.push(object);
2 голосов
/ 05 января 2012

(Прежде всего, у вас нет массива JSON, у вас есть объект JavaScript. JSON - это строковое представление данных с синтаксисом, похожим на буквальный синтаксис объекта JavaScript.)

К сожалению, когда вы используете буквальный синтаксис объекта JavaScript для создания объекта, вы не можете использовать переменные для установки динамических имен свойств. Сначала необходимо создать объект, а затем добавить свойства с использованием синтаксиса obj[propName]:

var test = "dd" + questNumb,
    myObj = { "content" : {"date":""} };

myObj[test] = {"title" : ""};

window.voiceTestJSON.push(myObj);
2 голосов
/ 05 января 2012

Вам нужно сделать что-то вроде этого:

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);
0 голосов
/ 05 января 2012
{test:{"title":""}, "content":{"date":""}}

это объект JS.Таким образом, вы помещаете объект в массив voiceTestJSON.

В отличие от JSON, имена свойств объекта JS могут быть записаны с кавычками или без них.

То, что вы хотите сделать, может быть достигнуто следующим образом:

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

Таким образом вы устанавливаете для свойства с именем, содержащимся в тесте, значение {"title": ""}.

...