javascript - 如何在不丢失索引的情况下过滤数组?
问题描述
app.component.html
<div class="input-group">
<input type="text" #searchBox class="form-control chapter-filter" placeholder="Search chapter..." name="chapter" [(ngModel)]="searchText" />
-
{{章节?名称}}'
** 在searchText的基础上,我正在过滤章节**
搜索-filter.pipe.ts
transform(items, searchText, searchField: string) {
let filteredList = [];
if (searchText) {
return items.filter(item => {
searchText = searchText.trim().toLowerCase();
let itemName = item[searchField].trim().toLowerCase();
if (itemName.indexOf(searchText) > -1) {
filteredList.push(item);
return filteredList;
}
})
} else {
return items;
}
}
问题是当我过滤任何章节时它工作正常,但是章节的索引是根据过滤的章节设置的。
--> 假设我有 3 章
- 一(索引 - 0)
- 二(索引 - 1)
- 三(索引 - 2)
当我输入三个时,它只显示三个。没错,但它的索引现在是 0。 我怎样才能让它保持索引 2。我的意思是它应该过滤但不应该改变索引。
解决方案
这里有几个选项。
- 将章节传递给点击处理程序
<li (click)="changeChapter(chapter)" *ngFor="let chapter of chapters | searchFilter">
并在原始数组中查找索引
changeChapter(chapter) {
this.chapterIndex = this.chapters.indexOf(chapter);
// and whatever ...
}
- 使 chapterIndex 的一个属性
Chapter
<li (click)="changeChapter(chapter)" *ngFor="let chapter of chapters | searchFilter">
{{ chapter.chapterIndex }} - {{ chapter.name }}
</li>
- 在组件内部执行过滤器逻辑
<li (click)="changeChapter(chapter)" *ngFor="let chapter of displayedChapters">
</li>
displayedChapters: Chapter[];
private allChapters: Chapter[];
changeChapter() {
// whatever happens here...
}
推荐阅读
- javascript - 如何使用 redux-toolkit 中的 createSlice 方法在不同的 reducer 函数中使用单个动作类型
- android - 如果我在 AndroidManifest.xml 中进行更改,我应该如何为应用应用更改?
- c++ - Boost Spirit X3:跳过什么都不做的解析器
- swupdate - 如何对 swupdate Web 界面实施身份验证(用户/密码)
- java - Java binarySearch 找不到所有字符
- python - 为什么我的代码返回随机字母标记,而不是单词标记?
- java - 将 node.js 应用程序作为依赖项添加到 java maven 项目
- c - else if 和 else {if} 的区别
- java - 如何生成、编译、jar、依赖一个gradle模块
- regex - “至少包含以下字母之一”类型的正则表达式问题