gpt4 book ai didi

Javascript 二维数组问题 - 所有元素都是最终条目的副本

转载 作者:行者123 更新时间:2023-11-30 10:54:10 25 4
gpt4 key购买 nike

我正在从 XML 文件创建一个 javascript 二维数组,然后在页面上显示之前根据需要对其进行操作和过滤。

当我循环遍历 XML 记录时,我对数据进行了一些操作,从中构建了一个普通数组 (rowRecord),然后将该数组添加到二维数组 (dataSet)。问题是,我最终得到了一个漂亮的二维数组,但所有记录都是我添加的最后一条记录的副本。

使用一些警报,我发现当我添加第一条记录时,一切都很好。然后我添加第二条记录,我得到一个包含 2 条记录的数据集,这两条记录都是记录 2。将第三条结果添加到包含 3 条记录的数据集中,每条记录都是第三条记录的副本。这对所有 1300 条记录进行,产生 1300 条相同的记录,所有这些记录都是来自 XML 的最后一条记录。

代码如下:

var rowRecord     = new Array();
var dataSet = new Array(rowRecord);

function getAjaxTridionInfo() {
var xmlFilename = 'filename.xml';
// make ajax call here, create xml object
xmlData = new Ajax.Request(xmlFilename,{
method:'get',
onSuccess: function(transport) {
var dataObj = transport.responseXML;
var vRoot = dataObj.getElementsByTagName('Items')[0];
for (var i=0; i<vRoot.childNodes.length; i++) {
if (vRoot.childNodes[i].nodeType == 1) {
var tridItem = vRoot.childNodes[i];

rowRecord[0] = tridItem.childNodes[0].firstChild.nodeValue.substring(26);
rowRecord[1] = tridItem.childNodes[1].firstChild.nodeValue;
rowRecord[2] = tridItem.childNodes[2].firstChild.nodeValue;
rowRecord[3] = rowRecord[1]+"/"+rowRecord[2];
rowRecord[4] = false;
rowRecord[5] = "n/a";
rowRecord[6] = "n/a";
rowRecord[7] = false;
rowRecord[8] = "n/a";
rowRecord[9] = "n/a";

//do some other processing here to determine rowRecord[4] - [9]

dataSet.push(rowRecord);
rowCount += 1;
}
}
//call next function here
},

onException: function(transport, exception) {
throw(exception);
alert('There has been a problem performing the Ajax call');
}
}
);
}

如有任何帮助或建议,我们将不胜感激。

最佳答案

您应该在函数中创建 rowRecord,而不是在函数外,以便为每行记录创建一个新数组

// NO NEED TO DECLARE ROWRECORD HERE...
var dataSet = new Array(); // <- why would we add anything initially?

function getAjaxTridionInfo() {
// ...
if (vRoot.childNodes[i].nodeType == 1) {
var tridItem = vRoot.childNodes[i];

// IMPORTANT TO MAKE A NEW ARRAY HERE
var rowRecord = new Array();

rowRecord[0] = tridItem.childNodes[0].firstChild.nodeValue.substring(26);
rowRecord[1] = tridItem.childNodes[1].firstChild.nodeValue;
rowRecord[2] = tridItem.childNodes[2].firstChild.nodeValue;
rowRecord[3] = rowRecord[1]+"/"+rowRecord[2];
rowRecord[4] = false;
rowRecord[5] = "n/a";
rowRecord[6] = "n/a";
rowRecord[7] = false;
rowRecord[8] = "n/a";
rowRecord[9] = "n/a";

//do some other processing here to determine rowRecord[4] - [9]

dataSet.push(rowRecord); // <- PUSHES THE NEW ARRAY
rowCount += 1;
}
// ...
}

关于Javascript 二维数组问题 - 所有元素都是最终条目的副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3178787/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com