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

时间:2016-04-19 10:49:46

标签: javascript json

我有一个json对象' items'我试图获得所有的价值观#39;分成一个单独的字符串:

 "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/

目前我只能输出其中一个&#39;值&#39;集。

1 个答案:

答案 0 :(得分:1)

  

目前我只能输出其中一个&#39;值&#39;集。

嗯,是的;你每次都要覆盖它。

你说你想要&#34;一根弦,&#34;您显示的输出中包含[]。有趣的是,当你在迭代时没有处理JSON时,JSON可以在生成该字符串时发挥作用:

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

Array#map遍历items从我们的回调中为每个项目返回的内容构建一个新数组;在上面,我们返回相当于每个项目values数组的JSON字符串。然后我们join生成的数组,其间有逗号,以获得最终的字符串。

示例:

&#13;
&#13;
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>";
&#13;
&#13;
&#13;

如果你实际上想要一个字符串,而是想要一个数组数组,那就更简单了:

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

&#13;
&#13;
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>";
&#13;
&#13;
&#13;