[英]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.