Как можно было бы организовать такое поведение
имеется динамический массив c объектами вида
[
{"dish_id":1,"title":"Борщ", "type":"first"},
{"dish_id":3,"title":"Салат","type":"salad"},
{"dish_id":2,"title":"Каша", "type":"garnir"},
{"dish_id":1,"title":"Борщ", "type":"first"},
{"dish_id":3,"title":"Салат","type":"salad"},
{"dish_id":2,"title":"Каша", "type":"garnir"},
{"dish_id":1,"title":"Борщ", "type":"first"},
{"dish_id":4,"title":"Мяско","type":"meet"},
// итого 3 Борща, 2 Каши, 2 Салата, 1 Мясо = цена (сумма всех позиций)
]
У каждой позиции имеется своя,
персональная цена
Но если чел выбирает комплекс, у него срабатывает
цена за комплекс и тогда персональная цена не имеет значения
например имеем два типа комплекса (комплексы формируются исходя из типа, например ['first', 'garnir', 'salad'])
Первое + Второе + Салат = МиниСет
Первое + Второе + Салат + Мясо = Стандарт
Нужно как то отфильтровать общий массив чтобы получить что то типа
[ // итого Борщ, Каша, Салат, Мясо
{"dish_id":1,"title":"Борщ", "type":"first"},
{"dish_id":2,"title":"Каша", "type":"garnir"},
{"dish_id":3,"title":"Салат","type":"salad"},
{"dish_id":4,"title":"Мяско","type":"meet"},
]
[ // итого Борщ, Каша, Салат
{"dish_id":1,"title":"Борщ", "type":"first"},
{"dish_id":3,"title":"Салат","type":"salad"},
{"dish_id":2,"title":"Каша", "type":"garnir"},
]
[ // то что не вошло в комплекс
{"dish_id":1,"title":"Борщ", "type":"first"},
]
Тотал сумм получается Комплекс1 + Комплекс2 + сумма блюд не вошедших в комплекс
Я думал как это сделать, но реализация получается слишком сложная
Создать объекты "матрицу" с ключами и при обновлении данных заполнять эти матрицы соответствующими типами а из исходного массива удалить значения, но это как-то сильно топорно, в лоб.
Может подскажете
алгоритм, который помог бы изящно решить этот вопрос.