Как добавить значения в массив объектов динамически в javascript?

это массив объектов,

var data = [
      {"label" : "1", "value" : 12},
      {"label" : "1", "value" : 12},
      {"label" : "1", "value" : 12},
      {"label" : "1", "value" : 12}
    ];

Как я могу добавить значения к ним динамически? я попробовал приведенный ниже код, но безуспешно

var lab =["1","2","3", "4"];
var val = [42,55,51,22];
var data = new Array();
for(var i=0; i<4; i++){
   data[i].label = lab[i];
   data[i].value = val[i];    
}

кто-нибудь, пожалуйста.. спасибо заранее

Ответ 1

Сначала вы должны создать экземпляр объекта. Самый простой способ:

var lab =["1","2","3"];
var val = [42,55,51,22];
var data = [];
for(var i=0; i<4; i++)  {
    data.push({label: lab[i], value: val[i]});
}

Или другой, менее сжатый способ, но ближе к исходному коду:

for(var i=0; i<4; i++)  {
   data[i] = {};              // creates a new object
   data[i].label = lab[i];
   data[i].value = val[i];    
}

array() не создаст новый массив (если вы не определили эту функцию). Либо array(), либо new Array() или просто [].

Я рекомендую прочитать Руководство по JavaScript MDN.

Ответ 2

В 2019 году мы можем использовать Javascript ES6 Синтаксис, чтобы делать это кратко и эффективно

data = [...data, {"label": 2, "value": 13}]

Примеры

var data = [
      {"label" : "1", "value" : 12},
      {"label" : "1", "value" : 12},
      {"label" : "1", "value" : 12},
    ];
    
data = [...data, {"label" : "2", "value" : 14}] 
console.log(data)