JavaScript. Каждая функция, сохраняющая последнее значение - PullRequest
1 голос
/ 05 марта 2020

У меня есть функция с al oop, которая сохраняет данные в объекте, foreach l oop сохраняет последнее значение

var n = new Array();
    var weight  =   new Array();
    var obj =   {};
    var as  =   [];
    // var temp;

    $("input:checked").each(function(){
        temp    = this.value;
        // n.push(this.value);
        obj['ids']  =   temp;
        obj['weight']=  $("#weight"+temp).val();
        as.push(obj);
        delete temp;
    }); 
     console.log(as);

изображение таблицы

результат console.log равен

(5) [{…}, {…}, {…}, {…}, {…}]

0 : {идентификаторы: "298", вес: "1,00"}

1: {идентификаторы: "298", вес: "1,00"}

2: {идентификаторы: "298", вес: "1,00"}

3: {идентификаторы: "298", вес: "1,00"}

4: {идентификаторы: "298", вес: "1,00"}

это должно быть

(5) [{…}, {…}, {…}, {…}, {…}]

0 : {ids: "on", вес: "undefined"}

1: {ids: "4", вес: "1"}

2: {ids: "5", вес: "2"}

3: {идентификаторы: "6", вес: "3"}

4: {идентификаторы: "298", вес: "4"}

1 Ответ

2 голосов
/ 05 марта 2020

Вы добавляете одинаковую ссылку к объекту при каждом вызове push(). Создайте новый объект в каждой итерации, перемещая var obj = {}; внутри l oop. Кроме того, если вы определяете temp в l oop, вам не нужно использовать delete temp - это не значит, что оно в любом случае пригодится в этом случае.

var n = [], weight = [], as = [];

$("input:checked").each(function() {
  var temp = this.value;
  var obj = {};
  obj['ids'] = temp;
  obj['weight'] = $("#weight" + temp).val();
  as.push(obj);
});

console.log(as);

При этом вы можно улучшить логику c, используя вместо нее map():

let as = $("input:checked").map(function() {
  let temp = this.value;
  return {
    ids: temp,
    weight: $("#weight" + temp).val()
  }
}).get();

console.log(as);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...