滤波器阵列子阵
问题描述:
我在创建搜索过滤器的问题
,我用的是* ngFor模块中和名称通常是这样的:滤波器阵列子阵
(game.name.toLowerCase().includes(typed))
但平台,在阵列来只工作时,我把指数:
(game.platform[i].toLowerCase().includes(typed))
然而这个平台是动态的,我不能使用的或流派的东西过滤
内的Json
[
{
"name":"GTA",
"platform":[
"xbox",
"playstation"
]
}
]
组件
<tr *ngFor="let game of (games | searchGame:SearchedText.value)">
<td>{{game.name}}</td>
<td>{{game.category}}</td>
<td>{{game.platform | separator}}</td>
// "platform":["Playstation 4","Xbox One"]
<td>{{game.price | currency}}</td>
<td>{{game.quantity}}</td>
<td>{{game.production ? 'Sim' : 'Não'}}</td>
<td>{{game.description}}</td>
<td><i class="fa fa-pencil icon" aria-hidden="true" (click)="staticModal.show()"></i></td>
<td><i class="fa fa-times icon" aria-hidden="true" (click)="staticModal.show()"></i></td>
</tr>
管
transform(game, typed){
typed = typed.toLowerCase();
return game.filter(game =>
(game.name.toLowerCase().includes(typed)) ||
(game.category.toLowerCase().includes(typed)) ||
(game.platform.toLowerCase().includes(typed)) || // Error in this line
(game.price.toLowerCase().includes(typed)) ||
(game.quantity.toLowerCase().includes(typed)) ||
(game.production.toLowerCase().includes(typed)) ||
(game.description.toLowerCase().includes(typed))
);
}
答
如果我正确理解你的问题,你的过滤器是不是做你想要什么。
第一个管道参数应该是一个数组。我认为只是 '任意' 的作品,但 '任何[]' 更干净:-)
你正在做的:
tranform(game: any,...)
试试这个:
transform(game: any[], typed: string){
....
return game.filter(game => game.name.toLowerCase().indexOf(typed) > -1 ||
....
在开始搜索
进一步标记(键入)可能为空或为空。 为此,您应该添加以下内容以返回未过滤的数组。否则,你不会在你的* ngFor中看到任何东西。
if (typed == null || typed == "")
return game;
希望这会有所帮助。
编辑:用
game.filter(game => game.platforms.some(el => el.toLocaleLowerCase().includes(typed)))
名为
所以更换示数线工程: (Game.name.toLowerCase()包括(类型)) ,但是,这是一个数组的平台,只能当我把 (Game.platform [1] .toLowerCase()。包括(打印)) 我希望这个动态数组的每个索引也能工作。 –
不幸的是,这一行生成错误: 错误TypeError:无法读取未定义的属性'some' 与使用lowerCase时没有索引相同的错误 错误TypeError:无法读取未定义的属性'toLowerCase' –
我不确定措辞。 '平台'或'平台** **'。一切都是......在你的json中,它是平台,在你的代码中,它是没有's'的平台。 – Ludwig