2016-02-06 3 views
1

У меня есть функция в angularJS, которая использует find, чтобы проверить, существует ли элемент в массиве;Найти элементы во внутреннем массиве - angularJS

function matchCartItem(item) { 
    return $scope.cart[0].cart_items.find(function(itm) { 
     return itm.item_id === item.item_id 
    }); 
} 

Как вы можете видеть, что я передать item к функции, то я проверить, если item_id ушедшей item можно найти в items в cart_items массиве

Это прекрасно работает, но теперь я хочу измените его.

cart_items имеет внутренний массив cart_modifier_items . Когда передается cart_item, он содержит cart_modifier_items. Моя функция на данный момент проверяет только на соответствие cart_item

Как я могу изменить эту функцию, чтобы также проверить cart_modifier_items?

Так что я хочу, чтобы проверить соответствие item.item_id в $scope.cart[0].cart_items - моя функция делает это

Но также проверить соответствие item.cart_modifier_item[i] in $ scope.cart [0] .cart_items [я] .cart_modifier_items where я is like looping through all the cart_items`

Любая помощь/руководство оценило

структуры данных элемента

cart_item: [ 
    { 
     "id": 159, 
     "item_id": 20, 
     "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, 
     "cart_modifier_items": [ 
      { 
       "id": 34, 
       "item_id": 29, 
       "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 
      }, 
      { 
       "id": 35, 
       "item_id": 10, 
       "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 
      } 
     ] 
    } 
] 
+0

Пожалуйста, покажите структуру данных и ожидаемые результаты. Обратите внимание: 'find()' не имеет универсальной поддержки браузера и требует использования polyfill – charlietfl

+0

@charlietfl Я добавил структуру 'item'. Как я могу это сделать без использования 'find' –

ответ

1

Используйте стандартный some вместо находки:

function matchCartItem(item) { 
    return $scope.cart[0].cart_items.some(function(itm) { 
     return itm.item_id === item.item_id; 
    }); 
} 

some проверяет, есть ли какой-либо элемент в массиве, удовлетворяет условие.

+0

Как насчет внутреннего массива? 'cart_modifier_items' –

+0

Я хочу, чтобы иметь возможность прокручивать внутренний массив' cart_items' и возвращать один «истинный» –

0

Я думаю, вам просто нужно петля дважды, чтобы найти хороший товар телеги модификатора:

var findModifier = function(itemId, cartModifierId, cart_items){ 
    var itemLen = cart_items.length; 
    for(var i = 0; i < itemLen; ++i){ 
    if(cart_items[i].id === itemId){ 
     var modifierLen = cart_items[i].cart_modifier_items.length; 
     for(var j = 0; j < modifierLen; ++j){ 
     if(cart_items[i].cart_modifier_items[j].id == cartModifierId){ 
      return true; 
     } 
     } 
    } 
    } 
    return false; 
} 

См plunker: https://plnkr.co/edit/oYWL8OKbzmHUvUG0sCmi?p=preview

+0

. Я вижу, что вы передаете много элементов функции ... все, что я могу передать, - это элемент ' –

+0

Я только передаю: ваш $ scope.cart [0] .cart_items как cart_items ваш« товар »как itemId и идентификатор cart_modifier, чтобы найти. Вы хотите передать только корзину_modifier_id? – didjoman

+0

'item = cart_item' и' cart_modifier_items' находятся внутри 'cart_item' ..... поэтому' item' содержит все. Я хочу проверить 'item' внутри' $ scope.cart [0] .cart_items' –

Смежные вопросы