如何在打字稿中过滤对象数组

Posted

技术标签:

【中文标题】如何在打字稿中过滤对象数组【英文标题】:How to filter an object array in typescript 【发布时间】:2020-03-22 00:58:31 【问题描述】:

我实现了一个具有自动完成功能的输入字段,它使用材料自动完成。 现在我有一个问题,。

这个对象数组包含键和值。

html 看起来像这样:

<input matInput type="text" [formControl]="locationField" [(ngModel)]="node.field" [name]="node.id"
             [matAutocomplete]="auto" placeholder="Field"/>
<mat-autocomplete #auto="matAutocomplete">
    <mat-option *ngFor="let field of fields" [value]="field.key">
        field.value
    </mat-option>
</mat-autocomplete>

现在我需要一个方法,如果我在输入字段中添加新值,它会创建新的 mat-option。

过滤功能如下所示:

private filterField(value: string): string[] 
    const allFields = this.locationFilterFields;
    if (value) 
        this.locationFieldResults = ArrayObject.filter((result) => 
            return searchFieldResult.indexOf(value) !== -1;
        );
    

有什么解决办法吗?

【问题讨论】:

【参考方案1】:

由于我不知道您所拥有的 value 的类型,但这是您可以过滤对象数组的方式:-

var friends= [
   name: "rachel", drink: "latte",
   name: "joey", drink: "latte",
   name: "phoebe", drink: "tea",
   name: "chandler", drink: "tea"
];

   var newFriends=  heroes.filter(function(hero) 
   return friends.drink== "latte";
);

【讨论】:

【参考方案2】:

    Object.keys(array_object).filter(key => typeof array_object[key as any] === "number").forEach((tempobjentry)=> 
//      inspect tempobjentry
    );

上面的代码 sn-p 过滤键类型为数字的 array_object 条目,forEach 有助于枚举过滤后的条目。您可以更换条件以满足您的要求。希望这可以帮助。更详细的解释也可以参考How do I filter an array with TypeScript in Angular 2?。

【讨论】:

以上是关于如何在打字稿中过滤对象数组的主要内容,如果未能解决你的问题,请参考以下文章

在打字稿中向对象数组插入新值

如何将对象数组转换为在打字稿中具有动态键的单个对象

如何将这些对象转换为打字稿中的数组

从数组打字稿中删除对象(Angular 2)

如何在打字稿中使用可能的字符串和数字索引确定对象的类型?

无法从打字稿中的 json 对象获取数组响应