Javascript For循环每次只添加相同的对象,而不是不同的对象属性

Javascript For循环每次只添加相同的对象,而不是不同的对象属性,javascript,arrays,loops,for-loop,Javascript,Arrays,Loops,For Loop,我正在编写一个for循环,它迭代一个数组,该数组在文本文档中包含不同的行 每次迭代,我都会尝试提取每个文本数据行的某些部分,并将它们添加到一个对象,即LocaliNodeData 在每次迭代结束时,我尝试将LocaliNodeData对象(每个对象属性都设置为新的)添加到新数组中 在将每一行中找到的字符串添加到数据数组(LocalNodeDataObjarray)时,每个数组的值都不同。但是,当我现在在每次迭代中更改LocaliNodeData对象属性并尝试将更改后的对象附加到数组中时,我在所有

我正在编写一个for循环,它迭代一个数组,该数组在文本文档中包含不同的行

每次迭代,我都会尝试提取每个文本数据行的某些部分,并将它们添加到一个对象,即LocaliNodeData

在每次迭代结束时,我尝试将LocaliNodeData对象(每个对象属性都设置为新的)添加到新数组中

在将每一行中找到的字符串添加到数据数组(LocalNodeDataObjarray)时,每个数组的值都不同。但是,当我现在在每次迭代中更改LocaliNodeData对象属性并尝试将更改后的对象附加到数组中时,我在所有数组位置都会得到相同的对象,例如

警报(LocalNodeDataObjarray[x].x_-COORD)

对于x的所有值,x_坐标都是相同的

function GetlocalinoDataFromFile(localinoDataFile){
    var localinoDataObjArray = new Array();
    var localinoData = {
        time: null,
        tagID: null,
        X_COORD: null,
        Y_COORD: null,
        Z_COORD: null,
    };

    var allData = localinoDataFile.responseText;
    var arrayOfDataLines = allData.split('\n');

    // for each iteration, get the tagID, and the co-ords(seperate) and then 
    // create a localinoData object and add to array
    for (var i = 0; i < arrayOfDataLines.length; i++) {    

        if (/tag: [0-9]{22}/.test(arrayOfDataLines[i])) {
         var tagID = /tag: [0-9]{22}/.exec(arrayOfDataLines[i]);
         localinoData.tagID = tagID;

        }

        if (/[0-9]+.[0-9]{3}, [0-9]+.[0-9]{3}, [0-9].[0-9]{3}/.test(arrayOfDataLines[i])) {               
            XYZ_COORDS = /[0-9]+.[0-9]{3}, [0-9]+.[0-9]{3}, [0-9].[0-9]{3}/.exec(arrayOfDataLines[i]);   
            temp = XYZ_COORDS.toString();
            temp2 = temp.split(', ');
            // Here I am changing the object to new values each loop
            localinoData.X_COORD = temp2[0];
            localinoData.Y_COORD = temp2[1];
            localinoData.Z_COORD = temp2[2];

        }
        // Here I am appending the newly changed object to my array
        // however the same object is being added every time 
        // (which corresponds to the last line in the text document)
        localinoDataObjArray.push(localinoData);
    }  
     // the object values for localinoDataObjArray[0] 
     // and localinoDataObjArray[50] are the exact same
     alert(localinoDataObjArray[20].X_COORD);
}
函数getLocaliNodeDataFromFile(LocaliNodeDataFile){ var localinoDataObjArray=新数组(); 变量localinoData={ 时间:空, tagID:null, X_COORD:null, Y_COORD:null, Z_COORD:null, }; var allData=localinoDataFile.responseText; var arrayOfDataLines=allData.split('\n'); //对于每个迭代,获取tagID和co-ords(分开),然后 //创建LocaliNodeData对象并添加到数组 对于(var i=0;i 我希望所有数组值都与文本文档中的不同行对应。但是,所有数组值都是相同的(等于文本文档中最后一行的预期迭代结果)

我非常困惑,因为当I=0时,它应该添加一个对象,该对象具有文本文档中第一行的值,但是它显示了我希望从文档中最后一行获得的值


这对我来说很奇怪,似乎是一个循环问题?我很困惑,希望能在这件事上提供帮助。

它们都是对同一个对象的引用,您一直在覆盖它。 尝试在for循环的每次迭代中创建LocaliNodeData的新实例

function GetlocalinoDataFromFile(localinoDataFile){
    var localinoDataObjArray = new Array();

    var allData = localinoDataFile.responseText;
    var arrayOfDataLines = allData.split('\n');

    // alert(arrayOfDataLines[4]);

    // for each iteration, get the tagID, and the co-ords(seperate) and then create a localinoData object and add to array
    for (var i = 0; i < arrayOfDataLines.length; i++) { 
        var localinoData = {
            time: null,
            tagID: null,
            X_COORD: null,
            Y_COORD: null,
            Z_COORD: null,
        };   

        if (/tag: [0-9]{22}/.test(arrayOfDataLines[i])) {
         var tagID = /tag: [0-9]{22}/.exec(arrayOfDataLines[i]);
         localinoData.tagID = tagID;

        }

        if (/[0-9]+.[0-9]{3}, [0-9]+.[0-9]{3}, [0-9].[0-9]{3}/.test(arrayOfDataLines[i])) {               
            XYZ_COORDS = /[0-9]+.[0-9]{3}, [0-9]+.[0-9]{3}, [0-9].[0-9]{3}/.exec(arrayOfDataLines[i]);   
            temp = XYZ_COORDS.toString();
            temp2 = temp.split(', ');
            localinoData.X_COORD = temp2[0];
            localinoData.Y_COORD = temp2[1];
            localinoData.Z_COORD = temp2[2];
    }

    localinoDataObjArray.push(localinoData);
}  
 alert(localinoDataObjArray[20].X_COORD);
函数getLocaliNodeDataFromFile(LocaliNodeDataFile){ var localinoDataObjArray=新数组(); var allData=localinoDataFile.responseText; var arrayOfDataLines=allData.split('\n'); //警报(arrayOfDataLines[4]); //对于每个迭代,获取tagID和co-ords(单独),然后创建LocaliNodeData对象并添加到数组中 对于(var i=0;i
}

也许您应该在每次迭代时在循环内部重新初始化
locationData
。你每次都在添加/引用同一个对象,并且只有owerwrite它的属性。啊,是的,我明白了,这很有效,非常感谢!