Я фильтрую массив больших элементов на основе пользовательского ввода, и это становится медленным. Итак, желая внедрить дебод Loda sh. Тем не менее, отказ не влияет ни на что.
Ниже приведено поле ввода поиска в HTML, где пользователь вводит фильтр для массива.
<input v-model="search" type="text"/>
В следующем, Я зацикливаюсь на вычисляемом свойстве filteredIcons
, чтобы показать элементы.
<section v-if="icons.length">
<button v-for="(icon, index) in filteredIcons" :key="index">
<span v-html="icon.icon"></span>
<span v-text="icon.name"></span>
</button>
</section>
И это где большой массив icons
и фильтрация по вычисляемому свойству.
import { debounce } from "lodash";
export default {
data() {
return {
icons: [
{
"author":"svg",
"icon":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M13 16v5a1 1 0 01-1 1H9l-3-6a2 2 0 01-2-2 2 2 0 01-2-2v-2c0-1.1.9-2 2-2 0-1.1.9-2 2-2h7.59l4-4H20a2 2 0 012 2v14a2 2 0 01-2 2h-2.41l-4-4H13zm0-2h1.41l4 4H20V4h-1.59l-4 4H13v6zm-2 0V8H6v2H4v2h2v2h5zm0 2H8.24l2 4H11v-4z\"/></svg>",
"name":"icon-announcement.svg"
},
{
"author":"svg",
"icon":"<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 24 24\"><path d=\"M20 9v10a2 2 0 01-2 2H6a2 2 0 01-2-2V9a2 2 0 01-2-2V5c0-1.1.9-2 2-2h16a2 2 0 012 2v2a2 2 0 01-2 2zm0-2V5H4v2h16zM6 9v10h12V9H6zm4 2h4a1 1 0 010 2h-4a1 1 0 010-2z\"/></svg>",
"name":"icon-archive.svg"
}
],
search: ""
};
},
computed: {
filteredIcons: {
get() {
return this.icons;
},
set: debounce(function() {
this.icons = this.icons.filter(icon => {
icon.name.toLowerCase().includes(this.search.toLowerCase());
});
}, 500)
}
}
}
Я изо всех сил пытаюсь понять, почему это не работает, и что было бы лучшим способом go о фильтрации больших элементов данных в массиве путем реализации debounce. Любые советы будут оценены.