0

我正在逐步浏览一堆 XML,试图在 javascript 中构建一个数组。

XML:

<?xml version="1.0" encoding="utf8" ?>
<session>
    <id>12</id>
    <name>20130520105033-0-1</name>
    <userid>0</userid>
    <changed>2013-05-20 11:16:31</changed>
    <till>1</till>
    <custid>1</custid>
    <details>
        <item>
            <prodcode>TRD3066</prodcode>
            <qty>1</qty>
            <tax>15</tax>
            <uprice>23.1</uprice>
            <price>1</price>
        </item>
        <item>
            <prodcode>DIC72000280</prodcode>
            <qty>1</qty>
            <tax>15</tax>
            <uprice>278.26</uprice>
            <price>1</price></item>
        <item>
            <prodcode>KRE22208</prodcode>
            <qty>1</qty>
            <tax>15</tax>
            <uprice>4.65</uprice>
            <price>1</price>
        </item>
    </details>
    <comment></comment>
    <customer_comment></customer_comment>
</session>

用于解析此的 Javascript:(在传递详细信息 xml 标记后)

function parse(details){
    var ret=[];var tot=[];
    jQuery(details).find("item").each(function(){
        ret[0]= jQuery(this).find('prodcode').text();
        console.log("parse "+ret[0]);
        ret[1]= jQuery(this).find('qty').text();
        ret[2]= jQuery(this).find('tax').text();
        ret[3]= jQuery(this).find('uprice').text();
        ret[4]= jQuery(this).find('price').text();
        tot.push(ret);
        console.log("tot="+tot);
    });
    return tot;
}

问题控制台结果是

解析 TRD3066 tot=TRD3066,1,15,23.1,1 解析 DIC72000280 tot=DIC72000280,1,15,278.26,1,DIC72000280,1,15,278.26,1 解析 KRE22208 tot=KRE22208,1,2208,1,2208,1, 15,4.65,1,KRE22208,1,15,4.65,1

这是其中一个晚上,我只是不明白为什么最后的数组不是所有的单个项目?

4

2 回答 2

3

我认为这.each是导致问题的功能,您应该用简单的for循环替换它

var items = jQuery(details).find("item");
for (var i = 0; i < items.length; i++) {
    var ret = [];
    ret[0] = jQuery(items[i]).find('prodcode').text();
    console.log("parse " + ret[0]);
    ret[1] = jQuery(items[i]).find('qty').text();
    ret[2] = jQuery(items[i]).find('tax').text();
    ret[3] = jQuery(items[i]).find('uprice').text();
    ret[4] = jQuery(items[i]).find('price').text();
    tot.push(ret);
    console.log("tot=" + tot);
}
于 2013-06-12T09:37:41.530 回答
0

您将多次对同一个 ret 数组的引用推送到 tot,然后更改引用的 ret 数组。

另请注意,tot.push(ret) 不会将每个项目从 ret 推送到 tot,而是将 ret 的引用推送到 tot。当您在下一轮更改 ret 的内容时,看起来 tot 中的每个项目都在更改,因为它们都是对同一个数组的引用。

也许你想代替 tot.push(ret)

tot.push(ret[0], ret[1], ret[2], ret[3], ret[4]);

或者根本不制作那个 ret 数组,而是在获得单个文本时推送它们。

于 2013-06-12T10:25:30.423 回答