具有相同字段的javascript数组

时间:2013-11-21 17:01:26

标签: javascript xml arrays

我有一个如下所示的数组: console log of array

数组中的内容是从xml文件中获取的,如下所示: xml file

有没有办法对数组内容进行分组,例如,因为你可以看到斑点狗重复三次,因为它有3个菜。我希望我的数组像[“id”,“spotted dog”,“dish1”,“dish2”,“dish n ++”]

我坚持了很长一段时间,所以非常感谢你的帮助。 下面的代码确实获取了xml文件并在数组中拍摄内容

                downloadUrl("php_to_xml.php",function(data){
                var xml = data.responseXML;
                var array = [];
                var markers = xml.documentElement.getElementsByTagName("resdetails");
                var detail = xml.documentElement.getElementsByTagName("detail1");

                for (r = 0; r < detail.length; r++){
                    var maindetail = detail[r].childNodes[0].getAttribute('name');
                    var mainid = markers[r].getAttribute('id');
                    var dish = detail[r].childNodes[1];
                    var attrname = dish.getAttribute("name");
                    for (j = 0; j<detail[r].childNodes.length;j++){
                        var info = detail[r].childNodes[j].getAttributeNode('dishname');
                        if (info != null){
                            var txt = info.nodeValue;
                            array.push([mainid,maindetail,txt]);                                
                        }
                    }   
                }

1 个答案:

答案 0 :(得分:2)

试试这个(我无法测试)

for (r = 0; r < detail.length; r++){
    var maindetail = detail[r].childNodes[0].getAttribute('name');
    var mainid = detail[r].childNodes[0].getAttribute('id');

    var dishes=[];
    for (j = 1; j<detail[r].childNodes.length;j++){  // start at 1 because 0 should be resdetails
        var info = detail[r].childNodes[j].getAttributeNode('dishname');
        if (info != null){
            dishes.push(info.nodeValue); 
        }
    }
    array.push([mainid,maindetail,dishes]);  
}

这将返回一个数组,其中每个元素都是mainid,maindetail和所有菜肴的嵌套数组。

编辑:或者如果您不想要嵌套数组,请将array.push更改为:

array.push([mainid,maindetail].concat(dishes));