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

#javascript #arrays

#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. Вы знаете, что есть 3x lab и 4x val?

2. да, я знаю, это только здесь ошибочно.. спасибо, что сообщили мне

Ответ №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() или просто [] .

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

Ответ №2:

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

 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) 

В вашем случае (я знаю, что это было в 2011 году) мы можем сделать это с помощью map() и forEach(), как показано ниже

 var lab = ["1","2","3","4"];
var val = [42,55,51,22];

//Using forEach()
var data = [];
val.forEach((v,i) => 
   data= [...data, {"label": lab[i], "value":v}]
)

//Using map()
var dataMap = val.map((v,i) => 
 ({"label": lab[i], "value":v})
)

console.log('data: ', data);
console.log('dataMap : ', dataMap); 

Комментарии:

1. Если в map вы просто выполняете присваивания, вместо этого используйте forEach

2. Наверное, я использовал map тогда, потому что не знал i , что туда тоже можно попасть forEach .

3. Я отредактировал, чтобы включить оба способа, map() кратко.