在 javascript 中过滤嵌套数组中的 JSON 对象无法正常工作

问题描述 投票:0回答:1

我正在尝试在包含嵌套下拉列表项的下拉列表中实现搜索输入过滤器。 我从 api 获取的 JSON 数据作为下面给出的响应

API响应

glPlmAsmt.category = {
    "page_size": 100,
    "total": 5,
    "size": 5,
    "page_offset": 0,
    "items": [
        {
            "name": "Program Governance",
            "status": "active",
            "id": "PL-Ca3d6c3bf060",
            "created_by": "191ad6043e2e",
            "created_time": 1535619902.0,
            "subcategories": [
                {
                    "name": "Risk & Issue Management",
                    "status": "active",
                    "id": "PL-Ca9ab6aed051",
                    "created_by": "191ad6043e2e",
                    "created_time": 1543489628.0,
                    "subcategories": []
                },
                {
                    "name": "Process & Tools",
                    "status": "active",
                    "id": "PL-Ca1fd776d743",
                    "created_by": "191ad6043e2e",
                    "created_time": 1565863427.0,
                    "subcategories": []
                },
                {
                    "name": "Planning",
                    "status": "active",
                    "id": "PL-Caeb46a6dce6",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620426.0,
                    "subcategories": []
                },
                {
                    "name": "Monitoring & Tracking",
                    "status": "active",
                    "id": "PL-Caeb46a6d1b2",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620426.0,
                    "subcategories": []
                },
                {
                    "name": "Compliance to Standards",
                    "status": "active",
                    "id": "PL-Ca0c8335afc6",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535621467.0,
                    "subcategories": []
                }
            ]
        },
        {
            "name": "Engineering Maturity",
            "status": "active",
            "id": "PL-Ca3891dbcd9c",
            "created_by": "191ad6043e2e",
            "created_time": 1535620156.0,
            "subcategories": [
                {
                    "name": "Requirements Management",
                    "status": "active",
                    "id": "PL-Ca53e3a3f610",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620405.0,
                    "subcategories": []
                },
                {
                    "name": "Technical Solution Management",
                    "status": "active",
                    "id": "PL-Ca6b44070713",
                    "created_by": "191ad6043e2e",
                    "created_time": 1565863770.0,
                    "subcategories": []
                },
                {
                    "name": "Quality Assurance",
                    "status": "active",
                    "id": "PL-Cac7a654f1c9",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620387.0,
                    "subcategories": []
                },
                {
                    "name": "CI\/CD Management",
                    "status": "active",
                    "id": "PL-Ca7ba190bcca",
                    "created_by": "191ad6043e2e",
                    "created_time": 1565863878.0,
                    "subcategories": []
                }
            ]
        },
        {
            "name": "Team Management",
            "status": "active",
            "id": "PL-Ca009c852e4a",
            "created_by": "191ad6043e2e",
            "created_time": 1535619879.0,
            "subcategories": [
                {
                    "name": "Technical Expertise",
                    "status": "active",
                    "id": "PL-Ca6c3344d6cf",
                    "created_by": "191ad6043e2e",
                    "created_time": 1565864050.0,
                    "subcategories": []
                },
                {
                    "name": "Team Design",
                    "status": "active",
                    "id": "PL-Ca414304c958",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620904.0,
                    "subcategories": []
                },
                {
                    "name": "Team Engagement",
                    "status": "active",
                    "id": "PL-Cafe3fcd7218",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620895.0,
                    "subcategories": []
                },
                {
                    "name": "Team Fulfillment",
                    "status": "active",
                    "id": "PL-Ca59511f47d7",
                    "created_by": "191ad6043e2e",
                    "created_time": 1565863978.0,
                    "subcategories": []
                },
                {
                    "name": "Domain Expertise",
                    "status": "active",
                    "id": "PL-Ca375bc31659",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620915.0,
                    "subcategories": []
                }
            ]
        },
        {
            "name": "Client Management",
            "status": "active",
            "id": "PL-Ca03453473e2",
            "created_by": "191ad6043e2e",
            "created_time": 1535619885.0,
            "subcategories": [
                {
                    "name": "Client Satisfaction",
                    "status": "active",
                    "id": "PL-Da414304c960",
                    "created_by": "PR-EmQR61tch032",
                    "created_time": 1535620904.0,
                    "subcategories": []
                },
                {
                    "name": "Stakeholder Management",
                    "status": "active",
                    "id": "PL-Ca7ff7f293a5",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535621056.0,
                    "subcategories": []
                },
                {
                    "name": "Value Strategy",
                    "status": "active",
                    "id": "PL-Ca632e3b4005",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535621083.0,
                    "subcategories": []
                },
                {
                    "name": "Contract Management",
                    "status": "active",
                    "id": "PL-Ca632e8a41a7",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535621083.0,
                    "subcategories": []
                }
            ]
        },
        {
            "name": "Financials",
            "status": "active",
            "id": "PL-Ca49906fcb17",
            "created_by": "191ad6043e2e",
            "created_time": 1535619853.0,
            "subcategories": [
                {
                    "name": "Revenue",
                    "status": "active",
                    "id": "PL-Ca873f87fde3",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620651.0,
                    "subcategories": []
                },
                {
                    "name": "Labor Expenses",
                    "status": "active",
                    "id": "PL-Ca5ecf370d0f",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620664.0,
                    "subcategories": []
                },
                {
                    "name": "Other Expenses",
                    "status": "active",
                    "id": "PL-Ca1b195c5dfe",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620679.0,
                    "subcategories": []
                }
            ]
        }
    ]
}

现在我想要实现的是,我正在尝试对 subcategoriesname 属性实现搜索,这样如果我输入关键字 tec 那么它应该显示结果对象,其中子类别名称包含用户输入的关键字,其中像这样

        {
            "name": "Engineering Maturity",
            "status": "active",
            "id": "PL-Ca3891dbcd9c",
            "created_by": "191ad6043e2e",
            "created_time": 1535620156.0,
            "subcategories": [
                {
                    "name": "Technical Solution Management",
                    "status": "active",
                    "id": "PL-Ca6b44070713",
                    "created_by": "191ad6043e2e",
                    "created_time": 1565863770.0,
                    "subcategories": []
                }
            ]
        },
        {
            "name": "Team Management",
            "status": "active",
            "id": "PL-Ca009c852e4a",
            "created_by": "191ad6043e2e",
            "created_time": 1535619879.0,
            "subcategories": [
                {
                    "name": "Technical Expertise",
                    "status": "active",
                    "id": "PL-Ca6c3344d6cf",
                    "created_by": "191ad6043e2e",
                    "created_time": 1565864050.0,
                    "subcategories": []
                }
            ]
        }

过滤Javascript代码

    const groupList = glPlmAsmt.category;
    const lowerContains = (x, y) => x.toLowerCase().includes(y.toLowerCase());

    const searchKeyword = element;
    const groupFiltered = groupList.filter(item =>
      (item.name && lowerContains(item.name, searchKeyword)) ||
      (item.subcategories.some(subname => lowerContains(subname.name, searchKeyword)))
    );
    console.log(groupFiltered);

我从这里引用了这段代码,它有点类似如何在嵌套对象数组中实现搜索?

但是对于此 JSON 数据它无法正常工作

第2点

即使实现了搜索,那么如何搜索其他项目,因为数组将在第一个搜索项目中被修改。

我被困住了,请帮忙。

谢谢

javascript html angularjs
1个回答
0
投票

const category = {
    "page_size": 100,
    "total": 5,
    "size": 5,
    "page_offset": 0,
    "items": [
        {
            "name": "Program Governance",
            "status": "active",
            "id": "PL-Ca3d6c3bf060",
            "created_by": "191ad6043e2e",
            "created_time": 1535619902.0,
            "subcategories": [
                {
                    "name": "Risk & Issue Management",
                    "status": "active",
                    "id": "PL-Ca9ab6aed051",
                    "created_by": "191ad6043e2e",
                    "created_time": 1543489628.0,
                    "subcategories": []
                },
                {
                    "name": "Process & Tools",
                    "status": "active",
                    "id": "PL-Ca1fd776d743",
                    "created_by": "191ad6043e2e",
                    "created_time": 1565863427.0,
                    "subcategories": []
                },
                {
                    "name": "Planning",
                    "status": "active",
                    "id": "PL-Caeb46a6dce6",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620426.0,
                    "subcategories": []
                },
                {
                    "name": "Monitoring & Tracking",
                    "status": "active",
                    "id": "PL-Caeb46a6d1b2",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620426.0,
                    "subcategories": []
                },
                {
                    "name": "Compliance to Standards",
                    "status": "active",
                    "id": "PL-Ca0c8335afc6",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535621467.0,
                    "subcategories": []
                }
            ]
        },
        {
            "name": "Engineering Maturity",
            "status": "active",
            "id": "PL-Ca3891dbcd9c",
            "created_by": "191ad6043e2e",
            "created_time": 1535620156.0,
            "subcategories": [
                {
                    "name": "Requirements Management",
                    "status": "active",
                    "id": "PL-Ca53e3a3f610",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620405.0,
                    "subcategories": []
                },
                {
                    "name": "Technical Solution Management",
                    "status": "active",
                    "id": "PL-Ca6b44070713",
                    "created_by": "191ad6043e2e",
                    "created_time": 1565863770.0,
                    "subcategories": []
                },
                {
                    "name": "Quality Assurance",
                    "status": "active",
                    "id": "PL-Cac7a654f1c9",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620387.0,
                    "subcategories": []
                },
                {
                    "name": "CI\/CD Management",
                    "status": "active",
                    "id": "PL-Ca7ba190bcca",
                    "created_by": "191ad6043e2e",
                    "created_time": 1565863878.0,
                    "subcategories": []
                }
            ]
        },
        {
            "name": "Team Management",
            "status": "active",
            "id": "PL-Ca009c852e4a",
            "created_by": "191ad6043e2e",
            "created_time": 1535619879.0,
            "subcategories": [
                {
                    "name": "Technical Expertise",
                    "status": "active",
                    "id": "PL-Ca6c3344d6cf",
                    "created_by": "191ad6043e2e",
                    "created_time": 1565864050.0,
                    "subcategories": []
                },
                {
                    "name": "Team Design",
                    "status": "active",
                    "id": "PL-Ca414304c958",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620904.0,
                    "subcategories": []
                },
                {
                    "name": "Team Engagement",
                    "status": "active",
                    "id": "PL-Cafe3fcd7218",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620895.0,
                    "subcategories": []
                },
                {
                    "name": "Team Fulfillment",
                    "status": "active",
                    "id": "PL-Ca59511f47d7",
                    "created_by": "191ad6043e2e",
                    "created_time": 1565863978.0,
                    "subcategories": []
                },
                {
                    "name": "Domain Expertise",
                    "status": "active",
                    "id": "PL-Ca375bc31659",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620915.0,
                    "subcategories": []
                }
            ]
        },
        {
            "name": "Client Management",
            "status": "active",
            "id": "PL-Ca03453473e2",
            "created_by": "191ad6043e2e",
            "created_time": 1535619885.0,
            "subcategories": [
                {
                    "name": "Client Satisfaction",
                    "status": "active",
                    "id": "PL-Da414304c960",
                    "created_by": "PR-EmQR61tch032",
                    "created_time": 1535620904.0,
                    "subcategories": []
                },
                {
                    "name": "Stakeholder Management",
                    "status": "active",
                    "id": "PL-Ca7ff7f293a5",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535621056.0,
                    "subcategories": []
                },
                {
                    "name": "Value Strategy",
                    "status": "active",
                    "id": "PL-Ca632e3b4005",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535621083.0,
                    "subcategories": []
                },
                {
                    "name": "Contract Management",
                    "status": "active",
                    "id": "PL-Ca632e8a41a7",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535621083.0,
                    "subcategories": []
                }
            ]
        },
        {
            "name": "Financials",
            "status": "active",
            "id": "PL-Ca49906fcb17",
            "created_by": "191ad6043e2e",
            "created_time": 1535619853.0,
            "subcategories": [
                {
                    "name": "Revenue",
                    "status": "active",
                    "id": "PL-Ca873f87fde3",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620651.0,
                    "subcategories": []
                },
                {
                    "name": "Labor Expenses",
                    "status": "active",
                    "id": "PL-Ca5ecf370d0f",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620664.0,
                    "subcategories": []
                },
                {
                    "name": "Other Expenses",
                    "status": "active",
                    "id": "PL-Ca1b195c5dfe",
                    "created_by": "191ad6043e2e",
                    "created_time": 1535620679.0,
                    "subcategories": []
                }
            ]
        }
    ]
};

const lowerContains = (x, y) => x.toLowerCase().includes(y.toLowerCase());

const searchKeyword = "tec";
const groupFiltered = category["items"].filter(item => 
  (item.name && lowerContains(item.name, searchKeyword)) ||
  (item.subcategories.some(t => t.name && lowerContains(t.name, searchKeyword)))
);

console.log(groupFiltered);

© www.soinside.com 2019 - 2024. All rights reserved.