Фильтровать массив объектов по значению объекта в подмассиве - PullRequest
0 голосов
/ 08 марта 2019

Я пытаюсь отфильтровать массив объектов на основе значения в подмассиве объектов из API WooCommerce Rest для загрузки в мое приложение React

вот упрощенная версия того, как выглядит массив

    const arrayExample =[
        {
            "id": 1,
            "name": "Product Name 1",
            "status": "publish",
            "categories":[
                {
                    "id": 34,
                    "name": "Category Name",
                    "slug": "category-name"
                }
            ],
            "acf":{
                "data_throughput": "100"
            }
        },
        {
            "id": 2,
            "name": "Product Name 2",
            "status": "publish",
            "categories":[
                {
                    "id": 32,
                    "name": "Another Category Name",
                    "slug": "another-category-name"
                },
                {
                    "id": 35,
                    "name": "Other Category Name",
                    "slug": "other-category-name"
                },
            ],
            "acf":{
                "data_throughput": "10"
            }
        },
        {
            "id": 3,
            "name": "Product Name 3",
            "status": "publish",
            "categories":[
                {
                    "id": 31,
                    "name": "New Category Name",
                    "slug": "new-category-name"
                },
                {
                    "id": 32,
                    "name": "Another Category Name",
                    "slug": "another-category-name"
                },
                {
                    "id": 34,
                    "name": "Category Name",
                    "slug": "category-name"
                },
            ],
            "acf":{
                "data_throughput": "50"
            }
        },

    ]

Я пытаюсь получить каждый элемент массива с именем категории "Имя категории" или идентификатором 34. Я попытался выполнить функцию фильтра с

const filterList = arrayExample.filter(info=>info.categories.name==="Category Name")

или даже

const filterList = arrayExample.filter(info=>info.categories.id===34)

но они оба возвращаются пустыми. Я не могу сделать info.categories [0], потому что это не всегда на первом месте.

Я вызываю API WooCommerce со своего веб-сайта для этих элементов, и я не могу найти другой соответствующий идентификатор для вызова, кроме имени категории или идентификатора. Я просто подхожу ко всему этому неправильно? У меня есть около 5 разных категорий, мне нужно звонить в разное время.

1 Ответ

3 голосов
/ 08 марта 2019

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

const arrayExample =[{"id": 1,"name": "Product Name 1","status": "publish","categories":[{"id": 34,"name": "Category Name","slug": "category-name"}],"acf":{"data_throughput": "100"}},{"id": 2,"name": "Product Name 2","status": "publish","categories":[{"id": 32,"name": "Another Category Name","slug": "another-category-name"},{"id": 35,"name": "Other Category Name","slug": "other-category-name"},],"acf":{"data_throughput": "10"}},{"id": 3,"name": "Product Name 3","status": "publish","categories":[{"id": 31,"name": "New Category Name","slug": "new-category-name"},{"id": 32,"name": "Another Category Name","slug": "another-category-name"},{"id": 34,"name": "Category Name","slug": "category-name"},],"acf":{"data_throughput": "50"}},]
    
let op = arrayExample.filter(({categories})=> categories.some(({id})=> id === 34))

console.log(op)
...