Javascript For循环每次只添加相同的对象,而不是不同的对象属性
我正在编写一个for循环,它迭代一个数组,该数组在文本文档中包含不同的行 每次迭代,我都会尝试提取每个文本数据行的某些部分,并将它们添加到一个对象,即LocaliNodeData 在每次迭代结束时,我尝试将LocaliNodeData对象(每个对象属性都设置为新的)添加到新数组中 在将每一行中找到的字符串添加到数据数组(LocalNodeDataObjarray)时,每个数组的值都不同。但是,当我现在在每次迭代中更改LocaliNodeData对象属性并尝试将更改后的对象附加到数组中时,我在所有数组位置都会得到相同的对象,例如 警报(LocalNodeDataObjarray[x].x_-COORD) 对于x的所有值,x_坐标都是相同的Javascript For循环每次只添加相同的对象,而不是不同的对象属性,javascript,arrays,loops,for-loop,Javascript,Arrays,Loops,For Loop,我正在编写一个for循环,它迭代一个数组,该数组在文本文档中包含不同的行 每次迭代,我都会尝试提取每个文本数据行的某些部分,并将它们添加到一个对象,即LocaliNodeData 在每次迭代结束时,我尝试将LocaliNodeData对象(每个对象属性都设置为新的)添加到新数组中 在将每一行中找到的字符串添加到数据数组(LocalNodeDataObjarray)时,每个数组的值都不同。但是,当我现在在每次迭代中更改LocaliNodeData对象属性并尝试将更改后的对象附加到数组中时,我在所有
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这对我来说很奇怪,似乎是一个循环问题?我很困惑,希望能在这件事上提供帮助。它们都是对同一个对象的引用,您一直在覆盖它。 尝试在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它的属性。啊,是的,我明白了,这很有效,非常感谢!