我尝试了以下代码:
var Mylist={[text:"rate"],
[text:"domain"]};
var newlist=
{[displayname:"rate"],
[displayname:"forms"],
[displayname:"domain"]};
Mylist.forEach(element=> {
newlist =newlist.filter(p =>
p.displayname===element.text);
});
```
Whatever is contained in `mylist` should be filtered in `newlist`.
Note: both list are dynamic and keeps changing its property value.
答案 0 :(得分:0)
这是一个简化的示例,它使用您指定的两个数组,并使用一个 Observable 作为通知机制。每当修改任一数组时,Observable 都会发出更改通知并重新过滤列表。
基本代码是这样的:
mylist = [{ text: 'rate' }, { text: 'domain' }];
newlist = [
{ displayname: 'rate' },
{ displayname: 'forms' },
{ displayname: 'domain' }
];
// Define an Observable to post notifications
private changeSubject = new BehaviorSubject<boolean>(true);
change$ = this.changeSubject.asObservable();
filteredList$ = this.change$.pipe(
map(() =>
this.newlist.filter(item =>
this.mylist.some(key => key.text === item.displayname)
)
)
);
addKey(key: string) {
this.mylist.push({ text: key });
// Change notification
this.changeSubject.next(true);
}
addDisplay(name: string) {
this.newlist.push({ displayname: name });
// Change notification
this.changeSubject.next(true);
}
然后 UI 绑定到 filteredList$
observable,因此只要过滤的数据发生变化,它就会自动更新。
可以在此处找到工作示例应用程序:https://stackblitz.com/edit/angular-filter-lists-as-data-changes-deborahk
如果这不是您所需要的,请随意 fork stackblitz 并根据需要进行更新。
答案 1 :(得分:0)
let yFilter=this.mylist.map(itemy=>{ return itemy.text; });
this.newlist=this.newlist.filter(itemx=>yFilter.includes(item.Displayname));