2016-08-20 3 views
0

У меня есть JSON:Динамически добавить объект в массиве яваскрипта

var obj = '{"Form":[],"Provider":[]}'; 

я нажимаю данные с переменным значением, чтобы сделать динамические объекты:

var pName = 'Tester'; 
var data = { 
    pName :["testing"] 
}; 
console.log(obj['Provider'].push(data)); 

Но что добавляет PNAME в качестве имени переменного, но не значение переменного то есть Тестер, я попробовал с + pName +, что тоже не работает.

Возвращает:

{"Form":[],"Provider":[{"pName":["Testing"]}]} 

Любая помощь будет оценена.

+0

Вы не можете взять недвижимость, такие как 'Provider' строки JSON; вы должны сначала преобразовать строку в объект JavaScript с помощью 'JSON.parse()' (или указать его как литерал объекта JavaScript для начала). –

ответ

2

Вы должны использовать синтаксис [] рядом с именем свойства. Он будет вычислять выражение в [] и возвращает значение.

См. Пример. Здесь data's объект со значением 'Tester'.

var obj = {"Form":[],"Provider":[]}; 
 

 
var pName = 'Tester'; 
 
var data = { 
 
    [pName] :["testing"] 
 
}; 
 

 
console.log(data.pName); // undefined 
 
console.log(data.Tester); // OK 
 

 
obj['Provider'].push(data); 
 

 
console.log(obj);

+0

Я собираюсь ответить на этот вопрос. Ха-ха. Отличная работа сэр. Ура! –

+0

, если вы собираетесь ввести синтаксис '[keyname]: value', вы должны хотя бы дать собственное имя для этой конструкции. Кроме того, если быть точным, этот синтаксис не «возвращает» значение; он ** использует ** значение в качестве имени ключа. Наконец, вы опустили упоминание проблемы OP с попыткой манипулировать строкой JSON, не переведя ее сначала в объект JavaScript. –

Смежные вопросы