Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有for循环的Javascript数组,仅返回最后一个元素_Javascript_Arrays_Loops - Fatal编程技术网

带有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
    };
})