循环遍历嵌套的json数组

时间:2014-04-18 07:29:11

标签: javascript arrays json

我想访问json数组的salesId,但sales也是一个数组,所以循环两次吗?

var json = [
  {
    'id':1,
    'sales':
    [
      {'salesId':123},
      {'salesId':456}

    ]
  },
  {
    'id':2,
   'sales':
   [
      {'salesId':789},
      {'salesId':111213}

    ]
  }
];

6 个答案:

答案 0 :(得分:1)

for (var i in json) {
   for (var j in json[i].sales) {
      var result = json[i].sales[j].salesId; // here "result" will get salesId
   }
}

自己看:here

答案 1 :(得分:1)

您不需要循环两次

//loop through the json array that holds objects
for (var i=0; i<json.length; i++) {
 var obj = json[i]; //reference to each object
 var sales = obj.sales;
 sales.forEach(function(element, index) {
     console.log(element.salesId);
 });
}

答案 2 :(得分:1)

您希望如何输出?

json.map(function(x){ return x.sales.map(function(y){return y.salesId})})

返回每个对象的ID

"[[123,456],[789,111213]]"

答案 3 :(得分:1)

您可以使用内部循环,例如salesId在销售中是动态的。

for(var i=0;i<json.length;i++){

    salesItem = json[i].sales;

    for(var j=0;j<salesItem.length;j++){

        var item = salesItem[j];
        console.log(item.salesId);

    }
}

答案 4 :(得分:1)

如果你不关心id,你可以简单地压扁数组:

var newArray = json.reduce(function(p,c,i){
    return i>1 ? p.concat(c.sales) : p.sales.concat(c.sales);
});

会给你:

[ // newArray
    {'salesId':123},
    {'salesId':456},
    {'salesId':789},
    {'salesId':111213}
]

如果您愿意,也可以使用reduce仅返回salesId数组。

答案 5 :(得分:1)

以下是另外两种方式。不建议这些更好,只是&#39;其他&#39;方式。

var json = [
  {
    'id':1,
    'sales':
    [
      {'salesId':123},
      {'salesId':456}

    ]
  },
  {
    'id':2,
   'sales':
   [
      {'salesId':789},
      {'salesId':111213}

    ]
  }
];
单步:

var results = [];

    for(i=0;i<json.length;i++){
      results.push ( JSON.stringify(json[i].sales).match(/(\d+)/g,function($1){
            return $1
        }))
     };

results; // [["123", "456"], ["789", "111213"]]
另一种方式:

var str;
for(i=0;i<json.length;i++){
      str =  str + JSON.stringify(json[i].sales);
};
 str = str.match(/(\d+)/g,function($1){
            return $1
 })
str; //["123", "456", "789", "111213"]