H30
H30

Reputation: 124

Angular Adding items from multiple arrays into Json object

I have 3 sets of Json data

data1 [{id:1, systemName: "foo", moreInfo: "blah},
       {id:2, systemName: "boo", moreInfo: "blahBlah}]


data2 [{systemName: "foo",count: 21},
       {systemName: "boo",count: 454}]

data3 [{systemName: "foo",count: 643},
       {systemName: "boo",count: 674}]

what I require is to take the counts from data 2 and 3 and add them to their respective objects in data1 with new name like data2Count and Data3Count

so data1 would look like this:

data1 [{id:1, systemName: "foo", moreInfo: "blah, data2Count: 21, data3Count: 643},
       {id:2, systemName: "boo", moreInfo: "blahBlah, data2Count: 454, data3Count: 674}]

Currently I can only achieve this:

data1 [{id:1, systemName: "foo", moreInfo: "blah"}
       {id:2, systemName: "boo", moreInfo: "blahBlah"} data2Count: 454]

Using:

angular.forEach(data1, function(value1, key1) {
    angular.forEach(data2, function(value0, key0) {
        if (value1.systemName === value1.systemName) {
            $scope.sysFlow.data2Count = value1.count
        }
    })
})

Upvotes: 1

Views: 456

Answers (1)

tanmay
tanmay

Reputation: 7911

You can use Array#map to do something like this:

var data1 = [
    {id:1, systemName: "foo", moreInfo: "blah"},
    {id:2, systemName: "boo", moreInfo: "blahBlah"}
  ]


var data2 = [
    {systemName: "foo",count: 21},
    {systemName: "boo",count: 454}
  ]

var data3 = [
    {systemName: "foo",count: 643},
    {systemName: "boo",count: 674}
  ]
  
data1 = data1.map(function(obj) {

  obj.data2Count = data2.filter(function(o) {
    return o.systemName === obj.systemName
  })[0].count;

  obj.data3Count = data3.filter(function(o) {
    return o.systemName === obj.systemName
  })[0].count;

  return obj;
})

console.log(data1)

Upvotes: 1

Related Questions