带有for循环的Javascript数组,仅返回最后一个元素
我有一个带有for循环的Javascript数组,仅返回最后一个元素,javascript,arrays,loops,Javascript,Arrays,Loops,我有一个for循环,它将数据添加到数组中。 但是当我console.log数组时,它充满了for循环的最后一项 这是我的密码: var materialsData = results[1].data, // results[1].data is a http.get return ln = Object.size(materialsData), materials = [], material = {}; material['Product'] = {}; for (var i = 0; i
for
循环,它将数据添加到数组中。
但是当我console.log
数组时,它充满了for
循环的最后一项
这是我的密码:
var materialsData = results[1].data, // results[1].data is a http.get return
ln = Object.size(materialsData),
materials = [],
material = {};
material['Product'] = {};
for (var i = 0; i < ln; i++) {
material.Product['Name'] = materialsData[i].Product.Name;
material.Product['Id'] = materialsData[i].Product.Id;
material.StartingDate = materialsData[i].StartingDate.replace("T00:00:00", "").split('-').reverse().join('-');
material.Device = materialsData[i].Device;
materials.push(material);
}
var materialsData=results[1]。数据,//结果[1]。数据是http.get返回值
ln=对象大小(材料数据),
材料=[],
材料={};
材料['Product']={};
对于(变量i=0;i
您正在一次又一次地更新和推送同一对象引用,以便该对象保存最后的元素值。相反,在for循环开始内部初始化对象保持变量
for(var i=0; i<ln; i++){
// initialize the object
var material = { Product : {}, Id : {}};
material.Product['Name'] = materialsData[i].Product.Name;
material.Product['Id'] = materialsData[i].Product.Id;
material.StartingDate = materialsData[i].StartingDate.replace("T00:00:00", "").split('-').reverse().join('-');
material.Device = materialsData[i].Device;
materials.push(material);
}
for(var i=0;i在for
块中定义material
。当对象通过引用传递时,相同的对象将更新并推送到数组中
for (var i = 0; i < ln; i++) {
var material = {
Product : {
Name : materialsData[i].Product.Name,
Id : materialsData[i].Product.Id,
},
StartingDate : materialsData[i].StartingDate.replace("T00:00:00", "").split('-').reverse().join('-'),
Device : materialsData[i].Device
};
materials.push(material);
}
您确实引用了同一个对象。对我来说,诀窍是将有问题的对象围绕JSON.stringify()
进行包装,然后在循环中对结果字符串调用JSON.parse()
var materialsDataString=JSON.stringify(结果[1].data),//results[1]。数据是http.get返回值
ln=对象大小(材料数据),
材料=[],
材料={};
材料['Product']={};
对于(变量i=0;i }
您在何处以及如何定义变量物料
?对象通过引用传递。因此,每次迭代,您都覆盖相同的变量
for (var i = 0; i < ln; i++) {
var material = {
Product : {
Name : materialsData[i].Product.Name,
Id : materialsData[i].Product.Id,
},
StartingDate : materialsData[i].StartingDate.replace("T00:00:00", "").split('-').reverse().join('-'),
Device : materialsData[i].Device
};
materials.push(material);
}
var materials = materialsData.map(function(m){
return {
Product : {
Name : m.Product.Name,
Id : m.Product.Id,
},
StartingDate : m.StartingDate.replace("T00:00:00", "").split('-').reverse().join('-'),
Device : m.Device
};
})