Получить данные из вложенного массива в ответ

Может кто-нибудь помочь мне отфильтровать данные массива, что там в "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
            }
        ],
array.find(group => group.some(item => item.promotion_type === "multi_buy"));
Thomas 21.12.2022 09:40
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
1
54
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете написать функцию поиска, как показано ниже.

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')
})

Сначала отфильтруйте данные с атрибутом типа продвижения, а затем отфильтруйте данные для определенного типа продвижения.

Другие вопросы по теме