Javascript 数组正在被覆盖

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

我有一个嵌套循环。在最内部的循环中,我创建数组,当控件从内部循环中出来时,我将在内部循环中形成的整个数组复制到新数组中

问题是,这些值最终会被改写。 我的数据将用于2个外循环,每个循环将分别有5个和24个内循环

但最终我得到的总数据是最后一个循环的数据

以下是js代码:

$(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
来保持父子索引。每个
在另一个
中声明。不管怎么说,有时候我想得太多了,事情总是回到简单上来。