简体   繁体   English

循环思想嵌套json数组

[英]loop thought nested json array

I want to access salesId of json array but sales is an array also, so do loop twice? 我想访问json数组的salesId,但是sales也是一个数组,所以循环两次吗?

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

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

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

See by yourself : here 自己看看: 这里

You don't need to loop twice 您不需要循环两次

//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);
 });
}

How do you want the output? 您如何想要输出?

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

returns ids per object 返回每个对象的ID

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

You can use inner loop instead, incase salesId is dynamic in sales. 如果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);

    }
}

If you don't care about the id you could simply flatten the array like so: 如果您不关心id ,则可以像下面这样简单地将数组展平:

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

which will give you: 这将为您提供:

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

You could also use reduce to return just an array of salesId too if you wanted. 如果需要,您也可以使用reduce来只返回一个salesId数组。

Here are two other ways. 这是另外两种方式。 Not suggesting these are better, just 'other' ways. 没有暗示这些更好,只是“其他”方式。

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

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

    ]
  }
];

one way: 单程:

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

another way: 其他方式:

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

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

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