Дано:
Фильтр по услугам: клейка обоев, выравнивание полов, покраска стен.
Список работников, работник может делать что-то одно или несколько услуг.
Фильтр (множество чекбоксов)
Результаты (множество)
Нужно вывести работников которые соответствуют хотя бы одному из фильтров по услугам.
Представим что в фильтре выбраны некие услуги [1,2,3,5,6]
Трансформации массива map
1 2 3 4 5 6 |
// вернет [true, undefined, undefined, undefined, undefined] [1,2,3,5,6].map(function (element) { if ([1,10].indexOf(element) !== -1) { return true; } }); |
1 2 3 4 5 6 |
// вернет [undefined, undefined, undefined, undefined, undefined] [1,2,3,5,6].map(function (element) { if ([21,10].indexOf(element) !== -1) { return true; } }); |
findIndex Вернет индекс из массива или -1 если ничего не найдено
1 2 3 4 5 6 |
// вернет 0 - индекс [1,2,3,5,6].findIndex(function(element){ if ([1,10].indexOf(element) !== -1) { return true; } }); |
1 2 3 4 5 6 |
// вернет -1 индекс не найден [1,2,3,5,6].findIndex(function(element){ if ([21,10].indexOf(element) !== -1) { return true; } }); |
filter фильтрует массив и возвращает массив подходящие по результату элементы
1 2 3 4 5 6 |
// вернет [1] [1,2,3,5,6].filter(function(element) { if ([1,10].indexOf(element) !== -1) { return true; } }); |
1 2 3 4 5 6 |
// вернет [] [1,2,3,5,6].filter(function(element) { if ([21,10].indexOf(element) !== -1) { return true; } }); |
some Вернет true если хоть один элемент найден, и закончит перебор
1 2 3 4 |
// Вернет true если хоть один элемент найден [1,2,3,5,6].some(function(element) { return [1,10].indexOf(element) !== -1; }); |
1 2 3 4 |
// Вернет false [1,2,3,5,6].some(function(element) { return [21,10].indexOf(element) !== -1; }); |
find — перебирает массив и если условие возвращает true, вернет элемент и прекратит перебор массива.
1 2 |
// вернет 5 [1,2,3,5,6].find(element => [5,10].includes(element)); |
1 2 |
// вернет undefined [1,2,3,5,6].find(element => [21,10].includes(element)); |
Для данного примеру лучше всего подходит some, с лаконичным вариантом.
1 2 |
// Some Более лаконичный вариант вернет true [1,2,3,5,6].some(element => [1,10].includes(element)); |