Как сделать фильтрацию по клику на Vue?

Разбираю задание из учебника по Vue js. Не могу понять - почему у меня не работает фильтрация по клику на кнопку "Фильтровать"? После клика в списке должны оставаться только числа меньше 10. Сделать нужно именно с помощью метода filter.

let appMeth5 = new Vue({
  el: '#app11',
  data: {
    items: [1, 25, 32, 4, 5],
  },
  methods: {
    filter: function() {
      this.items.filter(function(elem) {
        if (elem < 10) {
          return elem;
        }
      });
    },
  },
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app11">
  <ul>
    <li v-for="item in items"> {{ item }} </li>
  </ul>
  <button v-on:click="filter">Фильтровать</button>
</div>


Ответы (1 шт):

Автор решения: Mikalai Parakhnevich

Причина в том, что метод filter() создаёт новый массив со всеми элементами, прошедшими проверку, задаваемую в передаваемой функции.

Таким образом, ваш метод отрабатывает как положено, вам осталось результат его работы присвоить какой-либо переменной:

let appMeth5 = new Vue({
  el: '#app11',
  data: {
    items: [1, 25, 32, 4, 5],
    filterItems: [],
  },
  methods: {
    filter: function() {
      this.filterItems = this.items.filter(function(elem) {
        if (elem < 10) {
          return elem;
        }
      });
    },
  },
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>

<div id="app11">
  <ul>
    <li v-for="item in items"> {{ item }} </li>
  </ul>
  <pre v-if="filterItems.length">{{ filterItems }}</pre>
  <button v-on:click="filter()">Фильтровать</button>
</div>

или заменить существующий массив:

let appMeth5 = new Vue({
  el: '#app11',
  data: {
    items: [1, 25, 32, 4, 5],
  },
  methods: {
    filter: function() {
      this.items = this.items.filter(function(elem) {
        if (elem < 10) {
          return elem;
        }
      });
    },
  },
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.min.js"></script>

<div id="app11">
  <ul>
    <li v-for="item in items"> {{ item }} </li>
  </ul>
  <button v-on:click="filter()">Фильтровать</button>
</div>

→ Ссылка