Список фильтрации с использованием значения раскрывающегося списка в javascript

У меня есть массив объектов. Фильтрация массива объекта по выбору раскрывающегося значения.

const itemsList=[{
"id":"123",
"problems":{
    "causes":[ 
         {
        "SSEnabled": true,
        "IndusEnabled": false,
        "LogEnabled": true
        }
    ]
}
},
{
"id":"234",
"problems":{
    "causes":[
          {
        "SSEnabled": false,
        "IndusEnabled": false,
        "LogEnabled": true
        }
    ]
}
}]

у нас есть раскрывающийся список для фильтрации причины SSEnabled. Возможные варианты раскрывающегося списка: «показать», «без фильтра», «исключить».

Необходимо отфильтровать список на основе раскрывающегося списка.

Если выбрана опция «показать» в раскрывающемся списке «SSEnabled», результатом должен быть элемент списка, в котором «SSEnabled»: «true» (т.е. id: «123»)

Если выбрано «исключить» причины «SSEnabled», результатом должен быть элемент списка, в котором «SSEnabled: false» (т. Е. Id: «234»)

Если выбран вариант «без фильтра», он должен игнорировать фильтр. (т.е. id: «123», id: «234»)

filterList(filterType, filterValue, itemsList) {
   // filterType : SSEnabled (type of dropdown changed)
   //filterValue : show, exclude , no filter
itemsList.map((items) => {
  if (
    items &&
    items.problems &&
    items.problems.causes &&
    items.problems.causes.length
  ) {
    items.problems.causes.filter((cause) => {
       if (cause[filterType] === true && filterValue === 'show') {
        return true;
      }
      if (cause[filterType] === false && filterValue === 'exclude') {
        return true;
      }
    });
  }
});

console.info(itemsList, 'filtered List');
}

Но список не фильтруется. Помогите пожалуйста в фильтрации.

использовать метод фильтра массива

quirimmo 18.12.2018 17:20

то внутри вашего метода map вы ничего не возвращаете

quirimmo 18.12.2018 17:22

Array.map - неправильный инструмент. Array.map предназначен для тех случаев, когда вам нужен выходной массив с таким же количеством элементов, как и входной.

James 18.12.2018 17:25
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
2
3
1 313
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для этого нужно определить поиск функций, реализующих вашу логику, а затем передать правильную функцию в some() (или find()). Вы можете передать его в field, например show или exclude, и в key, который вы хотите фильтровать, например SSEnabled.

const itemsList=[{"id":"123","problems":{"causes":[ {"SSEnabled": true,"IndusEnabled": false,"LogEnabled": true}]}},{"id":"234","problems":{"causes":[{"SSEnabled": false,"IndusEnabled": false,"LogEnabled": true}]}}]

// implement the selection logic based on keyword
// will return items where some of the cause match the condition
const filters = (field, key ) => {
    let options = {
     show:     (i) => i[key] == true,
     nofilter: (i) => true,
     exclude:  (i) => i[key] == false
    } 
    return options[field]
}

// filter using the above function:

let SSEnabled = itemsList.filter(item => item.problems.causes.some(filters('show', 'SSEnabled')) )
console.info(SSEnabled)

let SS_not_enabled = itemsList.filter(item => item.problems.causes.some(filters('exclude', 'SSEnabled')) )
console.info(SS_not_enabled)

let LogEnabled = itemsList.filter(item => item.problems.causes.some(filters('show', 'SSEnabled')) )
console.info(LogEnabled)

Может ли SSEnabled в объекте фильтров быть динамическим ?? так как у меня есть больше таких атрибутов для фильтрации, как 'indusEnabled', 'logisticsEnabled'.

user8599269 19.12.2018 07:27

@ user8599269, конечно, вместо простого поиска объекта сделайте его функцией, которая принимает атрибут, который вы ищете. См. Редактировать.

Mark 19.12.2018 07:42

Другие вопросы по теме