根据子数组中的对象值过滤对象数组

Zom*_*nox 1 javascript arrays woocommerce-rest-api

我正在尝试根据 WooCommerce Rest API 中的对象子数组中的值过滤对象数组,以将其拉入我的 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"
            }
        },

    ]
Run Code Online (Sandbox Code Playgroud)

我试图获取类别名称为“类别名称”或 id 为 34 的每个数组项。我尝试使用以下命令执行过滤功能

const filterList = arrayExample.filter(info=>info.categories.name==="Category Name")
Run Code Online (Sandbox Code Playgroud)

甚至

const filterList = arrayExample.filter(info=>info.categories.id===34)
Run Code Online (Sandbox Code Playgroud)

但他们都空手而归。我无法执行 info.categories[0] 因为它并不总是位于第一位。

我从我的网站调用这些项目的 WooCommerce API,除了类别名称或 ID 之外,我找不到任何其他匹配的标识符可以调用。我对这整件事的处理方式是错误的吗?我有大约 5 个不同的类别需要在不同的时间调用。

Cod*_*iac 5

您将类别作为数组,因此需要通过索引访问它。但是您尝试直接访问而不指定任何索引。所以你可以简单地在你的过滤器中使用一些。

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)
Run Code Online (Sandbox Code Playgroud)