簡體   English   中英

Array.Push僅返回最后推送的對象。如何解決?

[英]Array.Push returns the last pushed object only..How to fix it?

我知道這個問題可能是重復的,但是沒有其他答案對我有用我正在嘗試將數組中的數據表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>

如何解決?

這是因為您總是在修改同一個對象,而不是為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);
}

直接做:

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

請嘗試以下操作,不建議在循環內聲明變量(不必要的內存分配)。

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

在此,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調用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM