const correspond = { "Название": "structure", "Тип": "category", "Страна": "country", "Город": "city", "Год": ["yearFrom", "yearTo"], "Высота": ["heightFrom", "heightTo"] } /* Структура возвращаемого ассоциативного массива: { input_id: input_value, ... } */ const dataFilter = (dataForm) => { let dictFilter = {}; // перебираем все элементы формы с фильтрами for (const item of dataForm.elements) { // получаем значение элемента let valInput = item.value; // если поле типа text - приводим его значение к нижнему регистру if (item.type === "text") { valInput = valInput.toLowerCase(); } if (item.type === "number"){ if (valInput.value === ""){ if(valInput.name.includes("From")){ valInput = -Infinity; } else{ valInput = Infinity; } } valInput = Number(valInput); } // формируем очередной элемент ассоциативного массива dictFilter[item.id] = valInput; } return dictFilter; } // фильтрация таблицы const filterTable = (data, idTable, dataForm) =>{ // получаем данные из полей формы const datafilter = dataFilter(dataForm); // выбираем данные соответствующие фильтру и формируем таблицу из них let tableFilter = data.filter(item => { /* в этой переменной будут "накапливаться" результаты сравнения данных с параметрами фильтра */ let result = true; // строка соответствует фильтру, если сравнение всех значения из input // со значением ячейки очередной строки - истина Object.entries(item).map(([key, val]) => { // текстовые поля проверяем на вхождение if (typeof val == 'string') { result &&= val.toLowerCase().includes(datafilter[correspond[key]]) } if (typeof val == 'number') { result &&= datafilter[correspond[key]+"From"]<=Number(val)&& datafilter[correspond[key]+"To"]>=Number(val) } // САМОСТОЯТЕЛЬНО проверить числовые поля на принадлежность интервалу }); return result; }); // САМОСТОЯТЕЛЬНО вызвать функцию, которая удаляет все строки таблицы с id=idTable clearTable(); // показать на странице таблицу с отфильтрованными строками createTable(tableFilter, idTable); }