【问题标题】:Array.Push returns the last pushed object only..How to fix it?Array.Push 仅返回最后一个推送的对象。如何解决?
【发布时间】:2019-09-05 11:53:35
【问题描述】:

我知道这个问题可能是重复的,但没有其他答案对我有用.. 我正在尝试将数组中的数据表 valueS 发送到控制器。但是,array.push() 只返回最后一个对象。

<script> 
  var dd = table.rows().data().toArray();
  var data1 = new Array();
  var CData= {};

 for (i = 0; i < dd.length; i++) {
  CData.Date = dd[i][1];
  CData.Description = dd[i][2];
  data1.push(CData);
}
 $.ajax({
type: "POST",
url: "/Test/Create",
contentType: "application/json;",
headers: { 'RequestVerificationToken': gettoken() },
data: JSON.stringify(data1:data1),
success: function () {
 alert('success');
},
error: function () {
   alert('failure');
}
 });
</script>

如何解决?

【问题讨论】:

    标签: javascript jquery arrays ajax asp.net-mvc


    【解决方案1】:

    这是因为您总是修改同一个对象,而不是为dd 的每次迭代创建一个单独的对象。

    您应该在循环中创建一个新对象,以避免每次都覆盖同一个对象:

     for (i = 0; i < dd.length; i++) {
      var CData= {}; // now new object each time
      CData.Date = dd[i][1];
      CData.Description = dd[i][2];
      data1.push(CData);
    }
    

    【讨论】:

    • 起初我尝试了你的一个,为我工作,但@AnantSingh---AlivetoDie 代码减少了我的代码,我选择了那个。再次感谢你..我会给你一个upvote先生..
    【解决方案2】:

    直接做:-

    for (i = 0; i < dd.length; i++) {
      data1.push({
        Date: dd[i][1], 
        Description:  dd[i][2]
      });
    }
    

    现在这3行代码将被删除:-

    var CData= {};
    
    CData.Date = dd[i][1];
    CData.Description = dd[i][2];
    

    【讨论】:

    • @Ben 很高兴为您提供帮助。
    【解决方案3】:

    尝试以下,不建议在循环内声明变量(不必要的内存分配)。

    var dd = table.rows().data().toArray();
    var data1 = new Array();
    
    for (i = 0; i < dd.length; i++) {
      data1.push({
        Date: dd[i][1],
        Description: dd[i][2]
      });
    }
    

    【讨论】:

      【解决方案4】:

      这里,CData 被定义为 Object。 它只需要最后一个值,因为它每次都覆盖并且最后一个值正在存储。 代替它,使用数组在其中存储对象值。

      示例

      var dd = table.rows().data().toArray();
      var data1 = new Array();
      var CData= [];
      
      for (i = 0; i < dd.length; i++) {
          CData[i] = {"Date" : dd[i][1],"Description" : dd[i][2]};
      }
      var required_data = JSON.stringify(CData);
      

      最后将 this(required_data) 发送到 ajax 调用。

      【讨论】:

        猜你喜欢
        • 2023-03-23
        • 1970-01-01
        • 1970-01-01
        • 2021-07-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多