使用angular.forEach进行数组转换 - AngularJS

时间:2016-02-05 09:49:27

标签: javascript angularjs

我从REST API获取数据,我想使用object创建一个新的Angular,然后使用{{1}将其传回API }}

$http

正如您所看到的,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: true } , { 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 } ] } ] } 包含多个orderItem,其中包含多个menu_modifier_groups

我想要做的是将这些数据转换为;

menu_modifier_itemscartItem

cartModifierItems将是:

cartItem

然后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 cartModifierItems: // an array containing all menu_modifier_items from all the menu_modifier_groups where selected = true cartModifierItems全部menu_modifier_items全部menu_modifier_groups selected: true cartItem cartItem.cartModifierItems {{1}} {{1}} {{1}}

感谢任何帮助或指导。

1 个答案:

答案 0 :(得分:0)

这是一个接受orderItem并输出cartItem的函数:

  SELECT product_name, SUM(status) AS live_count
    FROM `foo` 
GROUP BY product_name 
ORDER BY live_count DESC;

您的问题不是关于角度问题,而是关于JavaScript中数据转换的更多信息。查看我用于实现结果的方法和功能:

  1. angular.copy。创建深层对象副本。结合function makeCartItem(orderItem) { var cartItem = angular.copy(orderItem) delete cartItem.menu_modifier_groups cartItem.cartModifierItems = orderItem.menu_modifier_groups.reduce(function(acc, menuModifierGroup) { const selectedItems = menuModifierGroup.menu_modifier_items.filter(function(item) { return item.selected }) return acc.concat(selectedItems) }, []) return cartItem } // { // "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, // "cartModifierItems": [ // { // "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": true // }, // { // "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 // } // ] // } 我制作了一个新的delete - 衍生副本,但没有orderItem

    menu_modifier_groups
  2. var cartItem = angular.copy(orderItem)
    delete cartItem.menu_modifier_groups
    
    1. Array.prototype.reduce。在{ "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 } 上调用时,它会将每个值累积到从作为第一个参数传递的函数返回的新数组(第二个参数)中。

    2. Array.prototype.filter。通过传递给它的函数过滤menu_modifier_groups。如果任何遍历的项目具有真实性menu_modifier_items,那么它将被选中。

    3. Array.prototype.concat。将累加器数组与所选项数组合并为一个包含两者的新数组。

    4. JSBin