繁体   English   中英

循环思想嵌套json数组

[英]loop thought nested json array

我想访问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
   }
}

自己看看: 这里

您不需要循环两次

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

您如何想要输出?

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

返回每个对象的ID

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

如果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);

    }
}

如果您不关心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数组。

这是另外两种方式。 没有暗示这些更好,只是“其他”方式。

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

暂无
暂无

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

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