Фильтровать вложенный объект javascript - PullRequest
0 голосов
/ 18 марта 2020

Например, у нас есть 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 ....

Помогите мне, пожалуйста

Ответы [ 2 ]

0 голосов
/ 18 марта 2020

Допустим, у вас есть рекурсивная функция, которая проверяет, удовлетворяют ли введенные значения объекта пользователя.

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));
0 голосов
/ 18 марта 2020

Я предполагаю, что данные - это объект, подобный объекту obj, тогда data [0] не определен, поскольку данные - это объект, а не массив.

И если объект obj является объектом, то пользователь как ключ объекта является дубликатом

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