Groyreg
@Groyreg
Front-end

Как отфильтровать массив объектов?

Не получается переписать функцию для более обобщенного варианта.
Имеется массив данных, который я фильтрую таким образом:

computed: {
      resultGenes: function(){
          return this.filteredResultGenes.filter(function(elem) {
              return elem.snps[0].snpgroup[0].group_id == 1;
          });
      }

Данный фильтр работает. Но как переписать функцию фильтрации, если объектов snps и snpgroup будет несколько, а не по одному?
Пробовал через each, ничего не вышло. Мой вариант выглядел как-то так:

computed: {
      resultGenes: function(){
          return this.filteredResultGenes.filter(function(elem) {
              $.each(elem.snps, function(elem) {
                   $.each(elem.snpgroup, function(elem) {
                         return elem.group_id == 1;
                   }
              }
          });
      }
  • Вопрос задан
  • 1762 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
То есть, все group_id во всех вложенных объектах должны быть равны 1? Попробуйте так:

resultGenes() {
  return this.filteredResultGenes.filter(elem => {
    return elem.snps.every(n => n.snpgroup.every(m => m.group_id === 1));
  });
}

UPD. Вынесено из комментариев:

есть похожая задача, только мне необходимо сравнить два значения и если true то отрисовать блок. Every, как я понял возвращает лишь true или false. А есть какой-то метод, чтобы можно было в директиве v-if в массиве пройтись по всем объектам этого массива? ну т.е.
я хочу, чтобы сработала конструкция: v-if="type.id == date.activities.type_id " вот только activities может либо вообще не быть, либо быть пустым либо несколько их может быть.

Не надо v-if. Сделайте вычисляемое свойство, которое будет представлять данные, соответствующие условию, и выводите их все.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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