Array.Push仅返回最后推送的对象。如何解决?

时间:2019-09-05 11:53:35

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

我知道这个问题可能是重复的,但是没有其他答案对我有用。 我正在尝试将数组中的数据表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>

如何解决?

4 个答案:

答案 0 :(得分:2)

这是因为您总是在修改同一对象,而不是为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);
}

答案 1 :(得分:1)

直接做:-

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

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

var CData= {};

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

答案 2 :(得分:1)

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

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]
  });
}

答案 3 :(得分:1)

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

示例

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);

最终将此(required_data)发送给ajax调用。