Вот вам пример
По сути, объект не очень хороший способ хранения массивов, лучше преобразовать его в реальный массив со структурой вроде:
{ key: string, value: string }[]
Это позволит вам использовать фильтр массива и плавно интегрируется с угловым ngFor.
В компоненте:
/** Fixed structure or some logic that will transform your data into it like for exampe reducer */
list = [
{ key: 'ab', value: 'a val' },
{ key: 'bc', value: 'baa' },
{ key: 'kk', value: 'try' },
{ key: 'dd', value: 'again' },
]
/** Search phrase that will be used for filtering your data set */
phrase$ = new BehaviorSubject<string>('');
/** Observable for filtering out data to show in table */
items$ = this.phrase$.pipe(
map((phrase = '') => phrase.length > 0
? this.list
.filter(({ value }) => value.indexOf(phrase) >= 0).slice(0)
: this.list
)
)
/** pushing new phrase values */
onChange(e) {
this.phrase$.next(e);
}
В шаблоне
Enter search phrase: <input (keyup)="onChange($event.target.value)">
<table>
<tr *ngFor="let item of items$ | async"><th>{{ item.key }}</th><td> {{ item.value }}</td></tr>
</table>
Если вам нужна логика для преобразования данных в массив:
list = Object.entries(data).reduce((result, [key, value]) => {
result[key] = value;
return result;
}, {})