簡體   English   中英

過濾嵌套對象javascript

[英]Filter nested object javascript

例如,我們有 obj

const obj {

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

}

我需要搜索和顯示數據。 我創建了這個過濾器,其中“數據” - 它的對象,“參數” - 它來自 search/filter input 的值。

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 ....

請幫幫我

我假設 data 是一個類似於 obj 的對象,然后 data[0] 是未定義的,因為 data 是一個對象,而不是一個數組。

如果 obj 是一個對象,則 user 作為對象鍵是重復的

假設您有一個遞歸函數來檢查用戶對象值是否滿足輸入。

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));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM