noob
noob

Reputation: 99

loop thought nested json array

I want to access salesId of json array but sales is an array also, so do loop twice?

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

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

    ]
  }
];

Upvotes: 2

Views: 103

Answers (6)

james emanon
james emanon

Reputation: 11807

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

Upvotes: 1

Akinkunle Allen
Akinkunle Allen

Reputation: 1309

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

Upvotes: 1

Emissary
Emissary

Reputation: 10138

If you don't care about the id you could simply flatten the array like so:

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.

Upvotes: 1

undentifiedkc
undentifiedkc

Reputation: 21

You can use inner loop instead, incase salesId is dynamic in sales.

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

    }
}

Upvotes: 1

bobthedeveloper
bobthedeveloper

Reputation: 3783

How do you want the output?

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

returns ids per object

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

Upvotes: 1

Elfayer
Elfayer

Reputation: 4561

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

Upvotes: 1

Related Questions