2016-02-03 53 views
4

我有我從我的REST API獲取的對象...迭代通過與內部陣列陣列和創建新的對象 - AngularJS

我想通過數組循環,並從它創建

對象/數組這是陣列;

orderItem包含menu_modifier_groups包含menu_modifier_items

orderItem - >menu_modifier_groups - >menu_modifier_items

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

從我從我的REST API得到什麼,我想要做的是改變這個orderItem成爲;

// the main item + menu_modifier_items(where selected = true) without menu_modifier_groups 

$scope.mainItem = 
{ 
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_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 
} ] 
} 

所以我可以使用它與$http像下面一樣;

$scope.addItem = function(orderItem) { 

//transform orderItem here into mainItem 

    $http({ 
     method: 'post', 
     url: "http://api.example.com/web/cart/item/add", 
     data: $.param({ 
      'cartItem': $scope.mainItem 
     }), 
     headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
    }).success(function (data, status, headers, config) { 
    }); 
} 

任何意見/指導讚賞。

+0

爲什麼當用戶在視圖中進行選擇時你不能這麼做?不完全清楚你的目標是什麼 – charlietfl

+0

創建一個簡單的演示 – charlietfl

+0

我更新了問題 –

回答

0

Lodash這樣的javascript工具庫可能會讓你的生活在這裏變得更輕鬆。但這裏是你如何使用基本的JavaScript來做到這一點。

// Build your array of modifierItems by looping through the menu_modifier_group entries and taking only the ones that have selected: true 
var modifierItems = []; 
for (var i = 0; i < orderItem.menu_modifier_groups.length; i++) 
{ 
    if (orderItem.menu_modifier_groups[i].selected.menu_modifier_items) 
    { 
     for (var j = 0; j < orderItem.menu_modifier_groups[i].menu_modifier_items.length; j++) 
     { 
      if(orderItem.menu_modifier_groups[i].menu_modifier_items[j].selected === true) 
      { 
       modifierItems.push(orderItem.menu_modifier_groups[i].menu_modifier_items[j]); 
      } 
     } 

    } 
} 

// Now get rid of menu_modifier_groups, and use the remaining orderItem object as your $scope.mainItem, 
// and add the array of modifier items you built above as menu_modifier_items 
delete orderItem.menu_modifier_groups; 
$scope.mainItem = orderItem; 
$scope.mainItem.menu_modifier_items = modifierItems; 

// Now do your $http stuff 
+0

我不打開可悲地使用圖書館。 –

+0

沒有必要,我只是說lodash是這樣的數組東西很方便。答案只是使用普通的JavaScript。 – Benjamin