Как отфильтровать список курсов JS
Всем привет!
Суть такая, есть массив курсов и у них есть диапазон их стоимости:
// Список курсов
let courses = [
{ name: "Courses in England", prices: [0, 100] },
{ name: "Courses in Germany", prices: [500, null] },
{ name: "Courses in Italy", prices: [100, 200] },
{ name: "Courses in Russia", prices: [null, 400] },
{ name: "Courses in China", prices: [50, 250] },
{ name: "Courses in USA", prices: [200, null] },
{ name: "Courses in Kazakhstan", prices: [56, 324] },
{ name: "Courses in France", prices: [null, null] },
];
И есть варианты фильтров цен которые ввели пользователи:
// Варианты цен (фильтры), которые ищет пользователь
let requiredRange1 = [null, 200];
let requiredRange2 = [100, 350];
let requiredRange3 = [200, null];
Как можно отфильтровать список курсов, чтобы выдались только подходящие по цене?
Hеализовать нужно на чистом JS
Моя проблема в том что я не знаю что делать с 'null', если бы 'null' не было то давно бы все сделал)
Ответы (1 шт):
Автор решения: Atikingi
→ Ссылка
У меня получилось вот так. Просьба поправить если не правильно=)
let courses = [{
name: "Courses in England",
prices: [0, 100]
},
{
name: "Courses in Germany",
prices: [500, null]
},
{
name: "Courses in Italy",
prices: [100, 200]
},
{
name: "Courses in Russia",
prices: [null, 400]
},
{
name: "Courses in China",
prices: [50, 250]
},
{
name: "Courses in USA",
prices: [200, null]
},
{
name: "Courses in Kazakhstan",
prices: [56, 324]
},
{
name: "Courses in France",
prices: [null, null]
},
];
let requiredRange1 = [null, 200];
let requiredRange2 = [100, 350];
let requiredRange3 = [200, null];
function filtered(arrCourses, arrUser) {
const nullHandlerMin = (arr) => {
return (arr[0] === null ? 0 : arr[0])
}
const nullHandlerMax = (arr) => {
return (arr[1] === null ? Infinity : arr[1])
}
return arrCourses.filter(course => (nullHandlerMin(course.prices) <=
nullHandlerMax(arrUser)) && nullHandlerMax(course.prices) >=
nullHandlerMin(arrUser));
}
console.log(filtered(courses, requiredRange1));
console.log(filtered(courses, requiredRange2));
console.log(filtered(courses, requiredRange3));