过滤嵌套对象javascript

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

例如,我们有obj

const obj {

    user: {
         firstName: 'ivan',
         lastName: 'Petrov',
         role: {
              roleID: '111',
              roleName: 'admin',
            },
       },
    user: {
         firstName: 'Vlad',
         lastName: 'Segeda',
         role: {
              roleID: '222',
              roleName: 'Moderator',
            },
       }

}

我需要搜索和显示数据。我创建了此过滤器,其中“数据”-其对象,“参数”-其来自搜索/过滤器输入的值。

export const filter = (data, params) => {
    const keys = data[0] ? Object.keys(data[0]) : [];
    return data.filter((item) => {
        return keys.some(key => item[key].toString().toLowerCase().indexOf(params.toLowerCase().toString()) !== -1)
    });
};

但是此助手不能正常工作。当我输入“管理员”或“主持人”时。它什么也不返回。

我不知道,也许我应该使用forEach。...

[请帮我

javascript dictionary methods filter
2个回答
0
投票
我假设数据是类似于obj的对象,然后未定义data [0],因为data是对象,而不是数组。

并且如果obj是一个对象,则作为对象键的用户是重复的


0
投票
假设您有一个递归函数,该函数检查用户对象值是否满足输入。

const checkNestedRecursive = (obj, params) => { let flag = false; for(let key in obj) { if(typeof key === 'object') flag = flag || checkNestedRecursive(key, params); if(!flag) flag = flag || obj[key].toString() .toLowerCase() .indexOf(params.toLowerCase().toString()) !== -1 if(flag) return flag; } return flag; }

然后您可以过滤用户:

users.filter(user => checkNestedRecursive(user, params));

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