首页 > 解决方案 > JavaScript .each 函数保存最后一个值

问题描述

我有一个带有循环的函数,可以将数据保存在对象中,foreach 循环正在保存最后一个值

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:{ids:“298”,重量:“1.00”}

1:{ids:“298”,重量:“1.00”}

2:{ids:“298”,重量:“1.00”}

3:{ids:“298”,重量:“1.00”}

4:{ids:“298”,重量:“1.00”}

这应该是

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

0: {ids: "on", weight: "undefined"}

1:{ids:“4”,重量:“1”}

2:{ids:“5”,重量:“2”}

3:{ids:“6”,重量:“3”}

4:{ids:“298”,重量:“4”}

标签: javascriptjqueryhtmljsonobject

解决方案


您在每次调用中添加对对象的相同引用。push()通过在循环内移动,在每次迭代中创建一个新对象var obj = {};。此外,如果你temp在循环中定义你不需要使用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);

话虽如此,您可以map()改用以下方法来改进逻辑:

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

console.log(as);

推荐阅读