2016-12-12 4 views
3

У меня есть этот Javascript-код с переменной JSON, которая работает хорошо.Создать динамически JSON-ключи в цикле JS

var valuesJSON = { 
    projects: { 
     0: {value: 0, price: 0}, 
     1: {value: 0, price: 0}, 
     2: {value: 0, price: 0}, 
     3: {value: 0, price: 0}, 
     4: {value: 0, price: 0}, 
     5: {value: 0, price: 0}, 
     6: {value: 0, price: 0}, 
     7: {value: 0, price: 0}, 
    } 
    } 

Я хочу сделать его более масштабируемым, чтобы он считывал количество записей из константы. Я попробовал следующее, но цикл for в переменной не разрешен. Есть идеи?

const NUM_PROJECTS = 8 
var valuesJSON = { 
    projects: { 
     for (var i=0; i < NUM_PROJECTS; i++) { 
      i: {value: 0, price: 0}, 
     } 
    } 
    } 
+2

Используйте скобки обозначения, если переменная будет использоваться в качестве ключа! – Rayon

+0

'var valuesJSON = { проекты: { } }; for (var i = 0; i mplungjan

+5

Если все ключи являются последовательными и числовыми, почему это не' проекты 'a * array *? – deceze

ответ

3

Вы должны добавить свойства projectsfor с помощью цикла. Bracket notation необходимо использовать с версии variable в качестве ключа.

//Create object 
var valuesJSON = { 
    projects : {} 
} 

//Iterate and add properties 
for (var i = 0; i < NUM_PROJECTS; i++) { 
    valuesJSON.projects[i] = { 
     value: 0, 
     price: 0 
    } 
} 
+1

Ударьте вас на 8 секунд – mplungjan

2

Вы можете выполнить итерацию NUM_PROJECTS и создать новые объекты с требуемым результатом.

const NUM_PROJECTS = 8 
 
var valuesJSON = { projects: {}}; 
 

 
for (var i = 0; i < NUM_PROJECTS; i++) { 
 
    valuesJSON.projects[i] = { value: 0, price: 0 }; 
 
} 
 

 
console.log(valuesJSON);

2

Вы сначала сделать JavaScript Object.

var object = {}; 

Затем вы можете редактировать свойства (object.something) через доступ к массиву.

object.something == object['something'] 

так, чтобы установить значение в объекте, вы можете сделать

object['something'] = array_counter 

Не уверен, что вы хотели, чтобы я добавил и arrayinfying к объекту и положить его в качестве объекта.

var json = {} 
 
var projects = {}; 
 
var projectsArr = []; 
 
for(c=0;c<100;c++) { 
 
    var project_entry = { 
 
           name: 'project'+c, 
 
           a:c+1, 
 
           b:c*2 
 
           };  
 
      
 
    projects[project_entry.name] = project_entry; 
 

 
    projectsArr.push(project_entry); 
 
} 
 
json['projects'] = projects; 
 
json['projects_as_array'] = projectsArr; 
 
console.log(JSON.stringify(json,null,2));

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