Javascript 数组正在被覆盖
我有一个嵌套循环。在最内部的循环中,我创建数组,当控件从内部循环中出来时,我将在内部循环中形成的整个数组复制到新数组中 问题是,这些值最终会被改写。 我的数据将用于2个外循环,每个循环将分别有5个和24个内循环 但最终我得到的总数据是最后一个循环的数据 以下是js代码:Javascript 数组正在被覆盖,javascript,jquery,ajax,xsd,Javascript,Jquery,Ajax,Xsd,我有一个嵌套循环。在最内部的循环中,我创建数组,当控件从内部循环中出来时,我将在内部循环中形成的整个数组复制到新数组中 问题是,这些值最终会被改写。 我的数据将用于2个外循环,每个循环将分别有5个和24个内循环 但最终我得到的总数据是最后一个循环的数据 以下是js代码: $(document).ready(function(){ $.ajax({ url: "Sample.xsd", dataType: "html", success: function(data){
$(document).ready(function(){
$.ajax({
url: "Sample.xsd",
dataType: "html",
success: function(data){
var xmlObj = $.parseXML(data);
var buff = $(xmlObj).find("xs\\:complexType");
var xmlObj1 = []; var buff1 = [];
var j = 0;
$(buff).each(function(i){
buff1.splice(0, buff1.length);
$this = $(this);
$this.find("xs\\:element").each(function(index){
buff1[index] = $(this).attr('name');
});
xmlObj1[j] = buff1;
console.log(xmlObj1);
j++;
});
console.log(xmlObj1);
},
error: function(err){
}
});
});
如果需要,我也可以附加xsd文件。但我认为这并不重要
谢谢。在开始新循环之前,尝试在分配后将其重新分配为空数组值。老实说,我认为您做得太过分了。以下内容应为您提供预期结果:
$(function() {
$.ajax({
url: "Sample.xsd",
dataType: "html",
success: function(data) {
var xmlObj = $.parseXML(data), xmlObj1 = new Array(),
buff = $(xmlObj).find("xs\\:complexType");
$(buff).each(function(i) {
var buff1 = new Array();
$(this).find("xs\\:element").each(function(ii) {
buff1[ii] = $(this).attr('name');
});
xmlObj1[i] = buff1;
});
console.log(xmlObj1);
},
error: function(err) {
console.log(err);
}
});
})
基于类似的想法。您可以将
buff1
作为$(buff)的局部变量。每个循环
$(document).ready(function(){
$.ajax({
url: "Sample.xsd",
dataType: "html",
success: function(data){
var xmlObj = $.parseXML(data), xmlObj1 = [];
var buff = $(xmlObj).find("xs\\:complexType");
$(buff).each(function(i){
var buff1 = [], $this = $(this);
$this.find("xs\\:element").each(function(index){
buff1.push($(this).attr('name'));
});
xmlObj1.push(buff1)
});
console.log(xmlObj1);
},
error: function(err){
}
});
});
对不起,我没听懂你的话。实际上你是对的。当我将buff1阵列作为本地阵列制作时,它的效果非常好。但是,当它不是循环的局部时,问题是什么?到底是什么导致了数组的覆盖?拼接方法是您的问题。Splice最适合用于在构建阵列后对其进行操作,但在您的场景中,您仍在构建阵列,因此Splice不太适合。我还没有彻底测试它来支持我的主张,这只是我的第一个猜测。当我看到你在做什么(构建一个多维数组)时,我想,“我每天都这么做!没有必要进行所有的拼接和推送!”因此我只是简单地按照我开始编写代码的方式重新编写代码。哇,但是没有拼接方法我也会遇到同样的错误:)是的,我检查了,问题在于buff
的位置是“reset”,因此我将其声明为“在”for循环中。这样,每次都会重置。由于jQuery,索引变得很容易。当时,不需要维护j
变量。每个都有自己的索引。我只是简单地通过为每个添加另一个I
来保持父子索引。每个在另一个中声明。不管怎么说,有时候我想得太多了,事情总是回到简单上来。