使用子阵列过滤数组

时间:2017-05-28 20:18:11

标签: arrays angular filter ngfor angular2-pipe

我在创建搜索过滤器时遇到问题,我在模块中使用* ngFor,名称通常如下:

(game.name.toLowerCase().includes(typed))

但是,当我放入索引时,进入数组的平台才起作用:

(game.platform[i].toLowerCase().includes(typed))

然而,这个平台是动态的,我不能在过滤器

中使用for或类型的东西

的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))

    );


}

1 个答案:

答案 0 :(得分:0)

如果我理解你的问题,你的过滤器就没有做你想要的。

第一个管道参数应该是一个数组。我认为只是&#39;任何&#39;可以工作,但任何[]&#39;更干净: - )

你在做:

tranform(game: any,...)

试试这个:

transform(game: any[], typed: string){

....

return game.filter(game => game.name.toLowerCase().indexOf(typed) > -1 ||
....

此外,您的搜索令牌(已键入)可能为null或为空。 为此,您应该添加以下内容以返回未过滤的数组。否则你不会在* ngFor。

中看到任何内容
if (typed == null || typed == "")
    return game;

希望这有点帮助。

编辑:用

替换错误行
game.filter(game => game.platforms.some(el => el.toLocaleLowerCase().includes(typed)))