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



我正在编写一个 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时,它应该添加一个具有文本文档中第一行值的对象,但是它显示了我期望从文档中的最后一行获得的值。

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

它们都是对同一对象的引用,您不断覆盖该对象。 尝试在 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);

}

最新更新