Reputation: 124
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
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