@IvanIvanIvanIvanIvan

Сортировка массива?

var auto = [
          {
            marka: "BMW",
            model: "4k",
            cuzov: "A",
          },
           {
            marka: "Merc",
            model: "4k",
            cuzov: "B",
          },
           {
            marka: "Audi",
            model: "3k",
            cuzov: "C",
          },
           {
            marka: "Toyota",
            model: "1k",
            cuzov: "D",
          },
           {
            marka: "Lexus",
            model: "2k",
            cuzov: "E",
          },
           {
            marka: "Rang",
            model: "3k",
            cuzov: "F",
          },
           {
            marka: "BMW",
            model: "4k",
            cuzov: "G",
          },
           {
            marka: "BMW",
            model: "2k",
            cuzov: "Y",

          },
           {
            marka: "Audi",
            model: "3k",
            cuzov: "U",
          }
      ]
      var marka = ["Audi", "Rang", "Merc"];
      var model = ["4k", "2k", "3k"];
      var rez1 = auto.filter(x => (marka.includes(x.marka) && model.includes(x.model) && 
      cuzov.includes(x.cuzov)));
      console.log(rez1);


Фильтрую массив в соответствии с параметрами которые задал условно "Пользователь"
Такой вопрос. А что если "пользователь" скажем решит очистить массив model. Ну то есть выберет так что должны показываться все модели. То фильтр уже не будет работать. Что делать?
  • Вопрос задан
  • 98 просмотров
Решения вопроса 1
rockon404
@rockon404
Frontend Developer
Вот универсальный и расширяемый вариант:
var auto = [
  {
    marka: "BMW",
    model: "4k",
    cuzov: "A",
 },
 {
   marka: "Merc",
   model: "4k",
   cuzov: "B",
 },
 {
   marka: "Audi",
   model: "3k",
   cuzov: "C",
 },
 {
    marka: "Toyota",
    model: "1k",
    cuzov: "D",
 },
 {
    marka: "Lexus",
    model: "2k",
    cuzov: "E",
 },
 {
    marka: "Rang",
    model: "3k",
    cuzov: "F",
 },
 {
   marka: "BMW",
   model: "4k",
   cuzov: "G",
 },
 {
   marka: "BMW",
   model: "2k",
   cuzov: "Y",
 },
 {
   marka: "Audi",
   model: "3k",
   cuzov: "U",
 }
];

var marka = ["Audi", "Rang", "Merc"];
var model = ["4k", "2k", "3k"];
var cuzov = [];
var params = { marka, model, cuzov };
var activeKeys = Object.keys(params).filter(key => params[key].length);   
  
var rez1 = auto.filter(x => activeKeys.every(key => params[key].includes(x[key])) );

console.log(rez1);


Можно расширять объект параметров фильтрации. Параметры без элементов, отфильтровываются до этапа сравнения.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы