Может кто-нибудь помочь мне отфильтровать данные массива, что там в "promotion_type": "multi_buy".
Мне нужно отфильтровать данные, относящиеся к разделу «promotion_type»: «multi_buy».
const array = [
[
{
"type": "metadata",
"group_type": "metadata",
"schema_version": "1.1.0"
},
{
"type": "metadata",
"name": "invoice_identifier",
"value": "DEV16708433389494MO"
},
{
"type": "metadata",
"name": "ordered_at",
"value": "2022-12-12 11:11:16"
},
{
"type": "metadata",
"name": "billing_invoice_id",
"value": "bd898352-8824-424a-b3bc-2409250b4e56"
},
{
"type": "metadata",
"name": "unique_sku_count",
"value": "1"
},
{
"type": "metadata",
"name": "total_item_count",
"value": "11"
}
],
[
{
"type": "metadata",
"group_type": "promotion",
"promotion_type": "multi_buy",
"promotion_element_name": "COCA COLA CANS 200 ml Classic - Buy 10 for $8.00"
},
{
"product_sku_id": 85,
"type": "product",
"name": "Diet 200ml Each",
"name_docket": "",
"variant_info": "1 Unit",
"quantity": 10,
"price_inclusive": 95,
"total_exclusive": 864,
"total_inclusive": 950,
"discount_included": false
},
{
"type": "discount",
"name": "* Promo: COCA COLA CANS 200 ml Classic - Buy 10 for $8.00",
"quantity": 1,
"price_inclusive": -150,
"total_exclusive": -136,
"total_inclusive": -150
}
],
[
{
"type": "metadata",
"group_type": "surcharges"
},
{
"type": "shipping",
"name": "Shipping Charge",
"quantity": 1,
"price_inclusive": 1500,
"total_exclusive": 1364,
"total_inclusive": 1500
}
],
[
{
"type": "metadata",
"group_type": "totals"
},
{
"type": "tax_amount",
"name": "GST",
"amount": 72
},
{
"type": "total",
"name": "Total",
"total_exclusive": 2228,
"total_inclusive": 2300
}
],
[
{
"type": "metadata",
"group_type": "other"
},
{
"type": "other",
"name": "Total savings",
"amount": 150
}
],
[
{
"type": "metadata",
"group_type": "payments"
},
{
"type": "payment",
"id": 2044,
"identifier": "41a9a71a-e719-44e0-b35c-4731599cc413",
"name": "Credit Card",
"description": "Visa ending in 1111",
"amount": 2300,
"status": "success"
}
]
]
const soft = array[1]?.filter(({ categories }) =>
categories?.some(({ promotion_type }) => promotion_type === 'multi_buy')
);
Это метод, который я пробовал, но он не работал. Я нашел этот метод в переполнении стека. Но мне это было бесполезно, потому что он указывает конкретный массив. И в моем случае массив обновлялся динамически.
Мне нужно отфильтровать только этот бит данных.
[
{
"type": "metadata",
"group_type": "promotion",
"promotion_type": "multi_buy",
"promotion_element_name": "COCA COLA CANS 200 ml Classic - Buy 10 for $8.00"
},
{
"product_sku_id": 85,
"type": "product",
"name": "Diet 200ml Each",
"name_docket": "",
"variant_info": "1 Unit",
"quantity": 10,
"price_inclusive": 95,
"total_exclusive": 864,
"total_inclusive": 950,
"discount_included": false
},
{
"type": "discount",
"name": "* Promo: COCA COLA CANS 200 ml Classic - Buy 10 for $8.00",
"quantity": 1,
"price_inclusive": -150,
"total_exclusive": -136,
"total_inclusive": -150
}
],



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете написать функцию поиска, как показано ниже.
function search(arr) {
for (i = 0; i < arr.length; i++) {
const found = arr[i].some((el) => el.promotion_type === "multi_buy");
if (found) {
return arr[i];
}
}
}
console.info(search(array));
Это метод, который работал для меня.
const promotionalProducts = order?.invoice_items?.filter((item) => {
return !!item?.find(i => !!i?.promotion_type)
})
const multiBuy = promotionalProducts?.filter((item) => {
return !!item.find(i => i.promotion_type === 'multi_buy')
})
Сначала отфильтруйте данные с атрибутом типа продвижения, а затем отфильтруйте данные для определенного типа продвижения.
array.find(group => group.some(item => item.promotion_type === "multi_buy"));