Отфильтровать объект по одному значению js - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть JSON данные ниже:

{
    "items": [
        {
            "id": 3844,
            "sku": "aaa",
            "name": "aaa",
            "attribute_set_id": 4,
            "price": 2222,
            "status": 1,
            "visibility": 4,
            "type_id": "simple",
            "custom_attributes": [
                {
                    "attribute_code": "special_price",
                    "value": "2222.000000"
                },
                {
                    "attribute_code": "brand",
                    "value": "5465"
                },
                {
                    "attribute_code": "category_ids",
                    "value": [
                        "75",
                        "791",
                        "793",
                        "799"
                    ]
                },
                {
                    "attribute_code": "color",
                    "value": "5447"
                },
                {
                    "attribute_code": "size",
                    "value": "5432"
                }
            ]
        },
        {
            "id": 3843,
            "sku": "HV 119",
            "name": "Engine valve-Bajaj Pulsar 180cc DTSi",
            "attribute_set_id": 4,
            "price": 292,
            "status": 1,
            "visibility": 4,
            "type_id": "simple",
            "created_at": "2020-04-06 07:48:29",
            "updated_at": "2020-04-06 07:48:29",
            "weight": 0.25,
            "tier_prices": [],
            "custom_attributes": [
                {
                    "attribute_code": "special_price",
                    "value": "292.000000"
                },
                {
                    "attribute_code": "brand",
                    "value": "777"
                },
                {
                    "attribute_code": "category_ids",
                    "value": [
                        "75",
                        "793",
                        "1350"
                    ]
                }
            ]
        },
        {
            "id": 3842,
            "sku": "HV 118",
            "name": "Engine valve-Bajaj Pulsar 150cc DTSi / DIS.125",
            "attribute_set_id": 4,
            "price": 274,
            "status": 1,
            "visibility": 4,
            "type_id": "simple",
            "created_at": "2020-04-06 07:46:01",
            "updated_at": "2020-04-06 07:46:01",
            "weight": 0.25,
            "tier_prices": [],
            "custom_attributes": [               
                {
                    "attribute_code": "special_price",
                    "value": "274.000000"
                },
                {
                    "attribute_code": "category_ids",
                    "value": [
                        "75",
                        "793",
                        "1350"
                    ]
                }
            ]
        }
    ],
    "search_criteria": {
        "filter_groups": [
            {
                "filters": [
                    {
                        "field": "category_id",
                        "value": "75",
                        "condition_type": "eq"
                    }
                ]
            }
        ],
        "sort_orders": [
            {
                "field": "position",
                "direction": "DESC"
            }
        ],
        "page_size": 3,
        "current_page": 1
    },
    "total_count": 3
}

И у меня есть значение 777 . Мне нужны вышеуказанные данные, первый элемент имеет массив custom_attributes>attribute_code === brand и его значение === 777. Я должен фильтровать таким образом. Кроме того, по вторым данным у меня нет даже custom_attributes->attribute_code === brand. Так что я должен удалить эти данные и, наконец, нужно отфильтровать массив. Также в другом случае есть данные, соответствующие массиву category_ids в custom_attribute, который является массивом. Поэтому, используя указанное значение c, такое как 793, мне также нужно отфильтровать.

Код, который я пробовал, ниже

 let overAll = filt.items.filter(c => c.custom_attributes.map((i,j)=>{
                if(i.attribute_code === "brand"){
                    return i.value === 777
                }
            }))

Ожидаемый вывод:

{
    "items": [
        {
            "id": 3844,
            "sku": "aaa",
            "name": "aaa",
            "attribute_set_id": 4,
            "price": 2222,
            "status": 1,
            "visibility": 4,
            "type_id": "simple",
            "custom_attributes": [
                {
                    "attribute_code": "special_price",
                    "value": "2222.000000"
                },
                {
                    "attribute_code": "brand",
                    "value": "777"
                },
                {
                    "attribute_code": "category_ids",
                    "value": [
                        "75",
                        "791",
                        "793",
                        "799"
                    ]
                },
                {
                    "attribute_code": "color",
                    "value": "5447"
                },
                {
                    "attribute_code": "size",
                    "value": "5432"
                }
            ]
        }
    ],
    "search_criteria": {
        "filter_groups": [
            {
                "filters": [
                    {
                        "field": "category_id",
                        "value": "75",
                        "condition_type": "eq"
                    }
                ]
            }
        ],
        "sort_orders": [
            {
                "field": "position",
                "direction": "DESC"
            }
        ],
        "page_size": 3,
        "current_page": 1
    },
    "total_count": 3
}

1 Ответ

1 голос
/ 12 апреля 2020

Можете ли вы попробовать этот фильтр.

function filter(brand,no){
        return el.items.filter(x=>x.custom_attributes.find(y=>y.attribute_code==brand && (y.value==no  || y.value.includes(no)) ))
}

и назвать его

filter("brand",777)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...