У меня есть этот код Javascript с переменной JSON, который работает хорошо.

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},
        }
    }
  }
3
Arturo 12 Дек 2016 в 13:25

3 ответа

Лучший ответ

Вам необходимо добавить свойства в projects с помощью цикла for. нотация в скобках необходимо использовать, поскольку {{ X2}} используется в качестве ключа.

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

//Iterate and add properties
for (var i = 0; i < NUM_PROJECTS; i++) {
    valuesJSON.projects[i] = {
        value: 0,
        price: 0
    }
}
3
Satpal 12 Дек 2016 в 10:31

Сначала вы создаете объект javascript.

var object = {};

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

 object.something == object['something']

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

  object['something'] = array_counter

Не уверен, что вы хотели, поэтому я добавил массивы как к объекту, так и к объекту.

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));
2
Tschallacka 12 Дек 2016 в 10:34

Вы можете перебирать 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
Nina Scholz 12 Дек 2016 в 10:28