FireMonkey92 Ответов: 1

Фильтрация определенного объекта из массива объектов в javascript.


Я пытаюсь отфильтровать объект из массива объектов. Ниже приведен массив объекта.
const groupsList = [
    {
    "groupId": 1234,
    "adminId": 52,
    "name": "HHLC Health co",
    "directorName": "Mr Daric",
    "fax": "5556565655",
    "email": "test@test.com",
    "status": 1,
    "address1": "Akshya Nagar 1st Block 1st Cross",
    "districtName": "Berkshire",
    "addedDate": "2020-02-01T04:44:54.000Z",
    "lastModified": "2020-02-25T10:30:47.000Z"
    },
    {
    "groupId": 12335,
    "adminId": 52,
    "name": "Appolo Health Group",
    "directorName": "Mrs Fatima",
    "fax": "5556565655",
    "email": "test@test.com",
    "status": 1,
    "address1": "Akshya Nagar 1st Block 1st Cross",
    "districtName": "Berkshire",
    "addedDate": "2020-01-13T04:44:54.000Z",
    "lastModified": "2020-03-14T10:30:47.000Z"
  },
  {
    "groupId": 546,
    "adminId": 52,
    "name": "Highlights Health LLC",
    "directorName": "Mr Jordan",
    "fax": "5556565655",
    "email": "test@test.com",
    "status": 1,
    "address1": "Akshya Nagar 1st Block 1st Cross",
    "districtName": "Berkshire",
    "addedDate": "2020-02-13T04:44:54.000Z",
    "lastModified": "2020-02-14T10:30:47.000Z"
  }
]

ниже приведен объект, который я хочу отфильтровать из вышеприведенного массива.
const objectReady = {
  "groupId": "1234",
  "name": "Health",
  "addedDate": "01-02-2020",
  "lastModified": "25-02-2020"
}


Что я уже пробовал:

Вот что я попробовал с плагином lodash.
_.filter(groupsList, obj => moment(obj.lastModified).format('DD-MM-YYYY') === objectReady.lastModified || obj.name.toLowerCase().includes(objectReady.name.toLowerCase()) ||
                Number(obj.groupId) === Number(objectReady.groupId));


приведенный выше код прекрасно работает только для одного условия,
но для нескольких значений это не фильтрация данных.

Ожидаемый результат должен быть :

[{
    "groupId": 1234,
    "adminId": 52,
    "name": "HHLC Health co",
    "directorName": "Mr Daric",
    "fax": "5556565655",
    "email": "test@test.com",
    "status": 1,
    "address1": "Akshya Nagar 1st Block 1st Cross",
    "districtName": "Berkshire",
    "addedDate": "2020-02-01T04:44:54.000Z",
    "lastModified": "2020-02-25T10:30:47.000Z"
    }]

1 Ответов

Рейтинг:
7

Richard Deeming

Нет необходимости в плагине - filter уже встроен в Javascript:
Array.prototype.filter() - JavaScript | MDN[^]

let filteredList = groupsList.filter(obj => moment(obj.lastModified).format('DD-MM-YYYY') === objectReady.lastModified || obj.name.toLowerCase().includes(objectReady.name.toLowerCase()) || Number(obj.groupId) === Number(objectReady.groupId));
Демонстрация[^]

Причина, по которой он, по - видимому, ничего не фильтрует, заключается в том, что все три объекта в ваших образцовых данных соответствуют одному из условий в вашем фильтре-в частности, все три имеют имя, содержащее слово "здоровье".


FireMonkey92

Ohky, я в точку попал. Еще одно сомнение,

Если я сохраню этот предмет в таком виде...

константный objectReady = {
"groupId": "1234",
"имя": "",
"addedDate": "01-02-2020",
"lastModified": "25-02-2020"
}
он должен выступать фильтром первого объекта в массиве. Вместо того, чтобы возвращать все эти три объекта в массиве. Как этого достичь?

Richard Deeming

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

let filteredList = groupsList.filter(obj => moment(obj.lastModified).format('DD-MM-YYYY') === objectReady.lastModified || (objectReady.name && obj.name.toLowerCase().includes(objectReady.name.toLowerCase())) || Number(obj.groupId) === Number(objectReady.groupId));
Обновленная демо-версия[^]