Faaaah (copy to edit)

This commit is contained in:
2026-02-26 20:12:56 +10:00
parent 9a219093a0
commit 76555d27a4
7 changed files with 762 additions and 0 deletions

84
lab1/JavaScript/filter.js Normal file
View File

@@ -0,0 +1,84 @@
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);
}