【问题标题】:For Loop only adds same object every time instead of different object propertiesFor循环每次只添加相同的对象而不是不同的对象属性
【发布时间】:2019-08-08 15:00:44
【问题描述】:

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

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

在每次迭代结束时,我试图将 localinoData 对象(每个对象属性设置为一个新对象)添加到一个新数组中。

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

alert(localinoDataObjArray[x].X_COORD);

对于 x 的所有值,X_COORD 是相同的。

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

我希望所有数组值都与文本文档中的不同行相对应。然而,所有的数组值都是相同的(等于文本文档最后一行迭代的预期结果)。

我很困惑,因为当 i = 0 时,它应该添加一个对象,该对象具有我的文本文档中第一行的值,但是它显示了我期望文档中最后一行的值。

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

【问题讨论】:

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

标签: javascript arrays loops for-loop


【解决方案1】:

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

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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-03
    • 1970-01-01
    • 2017-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多