Reputation: 2164
I have an object that I fetch from my REST API
...
I want to loop through an inner array, check for an attribute and if that attribute is true
get a second attribute from the item.
This is the array;
orderItem: {
id: 159
name: Empanadas (Choice of 2)
description: Choice of Diced Beef; Spinach, Stilton and Onion; or Smoked Ham and Mozzarella
price: 700
available: 1
created_at: 2016-01-31 16:50:31
updated_at: 2016-01-31 16:50:31
menu_category_id: 41
restaurant_id: 11
menu_modifier_groups:
[ {
id: 9
name: Choose 2 Empanadas
instruction: null
min_selection_points: 2
max_selection_points: 2
force_selection: 1
created_at: 2016-02-01 01:03:35
updated_at: 2016-02-01 01:12:23
menu_item_id: 159
restaurant_id: 11
menu_modifier_items:
[ {
id: 34
name: Diced Beef
price: 0
created_at: 2016-02-01 01:04:08
updated_at: 2016-02-01 01:04:08
menu_modifier_group_id: 9
restaurant_id: 11
menu_item_id: 159
selected: false
} , {
id: 35
name: Smoked Salmon & Mozzarella
price: 0
created_at: 2016-02-01 01:04:37
updated_at: 2016-02-01 01:04:37
menu_modifier_group_id: 9
restaurant_id: 11
menu_item_id: 159
selected: true
} , {
id: 36
name: Stilton, Spinach and Onion
price: 0
created_at: 2016-02-01 01:05:05
updated_at: 2016-02-01 01:05:05
menu_modifier_group_id: 9
restaurant_id: 11
menu_item_id: 159
selected: false
} ]
} ]
}
What I want to do is find all menu_modifier_items
that have selected
= true
get the price
for each add them up together and finally add them to the price
of orderItem
.
all menu_modifier_items price + orderItem price
This is what I have so far;
$scope.calculatePrice = function(orderItem) {
var tot = orderItem.price;
angular.forEach(orderItem.menu_modifier_groups[0].menu_modifier_items,function(item){
if(item.selected == true) {
tot+=item.price;
}
return "Add for " + "₦" + tot;
});
}
In my code, menu_modifier_groups[0]
this means that I'm getting the first array, but what if orderItem
has many menu_modifier_groups
? In the case where I have menu_modifier_groups[0]
, menu_modifier_groups[1]
etc...
Any help/guidance appreciated.
Upvotes: 1
Views: 850
Reputation: 16609
You just need to have 2 forEach
s nested inside each other - loop through the groups, then loop through the items inside the current group:
$scope.calculatePrice = function(orderItem) {
var tot = orderItem.price;
angular.forEach(orderItem.menu_modifier_groups, function(group) {
angular.forEach(group.menu_modifier_items, function(item) {
if(item.selected == true) {
tot+=item.price;
}
});
});
return "Add for " + "₦" + tot;
}
Upvotes: 2