繁体   English   中英

如何遍历json对象的嵌套属性并创建新的数组列表?

[英]How do I iterate through nested properties of an json object and create a new array list?

我有一个json对象“ items”,并且我试图将所有“ values”放入一个单独的字符串中:

 "items":[  
      {  
         "id":0,
         "categoryId":0,
         "label":"TOTAL EDUCATION",
         "total":739599,
         "values":[  
            451383,
            288216
         ],
         "items":[  ],
         "metadataIds":"20006",
         "collapsed":true
      },
      {  
         "id":0,
         "categoryId":0,
         "label":"TOTAL HIGHWAYS",
         "total":63678,
         "values":[  
            32672,
            31006
         ],
         "items":[  ],
         "metadataIds":"20022",
         "collapsed":true
      },

for (var i = 0; i < obj.items.length; i++) {
        var cost = obj.items[i].values;
    }

我正在尝试从值中实现的输出:

[451383,288216],[32672,31006]等

此处的示例: https : //jsfiddle.net/zidski/6mg8fszj/

目前,我只能输出“值”集中的1个。

目前,我只能输出“值”集中的1个。

嗯,是; 您每次都覆盖它。

您已经说过要“一个字符串”,并且显示的输出中包含[] 有趣的是,当您在迭代时不使用JSON时,JSON可以在生成该字符串中发挥作用:

var str = obj.items.map(function(item) {
    return JSON.stringify(item.values);
}).join(",");

Array#map遍历items建立一个新的阵列出了什么事情,我们返回从我们的回调每个项目; 在上面的代码中,我们将返回与每个项目的values数组等效的JSON字符串。 然后,我们join所得阵列与逗号之间,以获得最终的字符串。

例:

 var obj = { "items": [{ "id": 0, "categoryId": 0, "label": "TOTAL EDUCATION", "total": 739599, "values": [ 451383, 288216 ], "items": [], "metadataIds": "20006", "collapsed": true }, { "id": 0, "categoryId": 0, "label": "TOTAL HIGHWAYS", "total": 63678, "values": [ 32672, 31006 ], "items": [], "metadataIds": "20022", "collapsed": true }] }; var str = obj.items.map(function(item) { return JSON.stringify(item.values); }).join(","); document.body.innerHTML = "<pre>" + str + "</pre>"; 

如果真正想要的字符串,而是想要一个数组的数组,这是一个有点简单:

var arrayOfArrays = obj.items.map(function(item) {
    return item.values;
});

 var obj = { "items": [{ "id": 0, "categoryId": 0, "label": "TOTAL EDUCATION", "total": 739599, "values": [ 451383, 288216 ], "items": [], "metadataIds": "20006", "collapsed": true }, { "id": 0, "categoryId": 0, "label": "TOTAL HIGHWAYS", "total": 63678, "values": [ 32672, 31006 ], "items": [], "metadataIds": "20022", "collapsed": true }] }; var arrayOfArrays = obj.items.map(function(item) { return item.values; }); // Just using JSON so we have text to show as a result document.body.innerHTML = "<pre>" + JSON.stringify(arrayOfArrays, null, 2) + "</pre>"; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM