Как отфильтровать список курсов 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));

→ Ссылка