Chr*_*ton 0 javascript typescript angular
我正在尝试在Angular应用程序中的对象数组内的嵌套数组上过滤a。这是组件代码的片段-
var teams = [
{ name: 'Team1', members: [{ name: 'm1' }, { name: 'm2' }, { name: 'm3' }] },
{ name: 'Team2', members: [{ name: 'm4' }, { name: 'm5' }, { name: 'm6' }] },
{ name: 'Team3', members: [{ name: 'm7' }, { name: 'm8' }, { name: 'm9' }] }
];
Run Code Online (Sandbox Code Playgroud)
我要达到的目标是m5,例如,如果搜索,我的结果应该是-
var teams = [
{ name: 'Team1', members: [] },
{ name: 'Team2', members: [{ name: 'm5' }] },
{ name: 'Team3', members: [] }
];
Run Code Online (Sandbox Code Playgroud)
所以,我有teams和filteredTeams性能,并在我的搜索功能,我做-
onSearchChange(event: any): void {
let value = event.target.value;
this.filteredTeams = this.teams.map(t => {
t.members = t.members.filter(d => d.name.toLowerCase().includes(value));
return t;
})
}
Run Code Online (Sandbox Code Playgroud)
现在,这确实在某种程度上起作用了,因为我要替换成员,这会破坏每次调用时的数组(如果这样的话)。我了解为什么会发生这种情况,但我的问题是实现此过滤器的最佳方法是什么?
检查一下。不用硬编码m5传递您的价值。
const teams = [
{ name: 'Team1', members: [{ name: 'm1' }, { name: 'm2' }, { name: 'm3' }] },
{ name: 'Team2', members: [{ name: 'm4' }, { name: 'm5' }, { name: 'm6' }] },
{ name: 'Team3', members: [{ name: 'm7' }, { name: 'm8' }, { name: 'm9' }] }
];
const filteredTeams = teams.map(team => ({ name: team.name, members: team.members.filter(member => member.name.includes('m5')) }));
console.log(filteredTeams);Run Code Online (Sandbox Code Playgroud)
你已经非常接近了,你唯一做错的就是改变了源对象teams
基本上,您可以使用扩展运算符生成一个新条目,然后返回一个包含新值的全新数组。
const teams = [
{ name: 'Team1', members: [{ name: 'm1' }, { name: 'm2' }, { name: 'm3' }] },
{ name: 'Team2', members: [{ name: 'm4' }, { name: 'm5' }, { name: 'm6' }] },
{ name: 'Team3', members: [{ name: 'm7' }, { name: 'm8' }, { name: 'm9' }] }
];
const value = 'm5';
const result = teams.map(t => {
const members = t.members.filter(d => d.name.toLowerCase().includes(value));
return { ...t, members };
})
console.log(result)Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
107 次 |
| 最近记录: |