【发布时间】:2021-07-15 08:12:37
【问题描述】:
我有一个如下所示的数据集:
teams = [
{
"teamName": "Alpha",
"members": [
{
"firstName": "John",
"lastName": "Doe"
},
{
"firstName": "Jane",
"lastName": "Doe"
}
]
},
{
"teamName": "Beta",
"members": [
{
"firstName": "John",
"lastName": "Doe"
}
]
}
]
我正在尝试通过 firstName + lastName 组合对所述列表实施搜索功能。到目前为止,我已经尝试过:
searchTerm = 'John Doe';
teams.filter(team =>
team.members.some(member =>
(member.firstName + ' ' + member.lastName).includes(searchTerm)
)
);
我希望它返回以下内容:
[
{
"teamName": "Alpha",
"members": [
{
"firstName": "John",
"lastName": "Doe"
}
]
},
{
"teamName": "Beta",
"members": [
{
"firstName": "John",
"lastName": "Doe"
}
]
}
]
但代码似乎返回了 John Doe 所属的团队,而没有将 Jane Doe 过滤掉。
关于我做错了什么有什么建议吗?
谢谢。
const teams = [
{
"teamName": "Alpha",
"members": [
{
"firstName": "John",
"lastName": "Doe"
},
{
"firstName": "Jane",
"lastName": "Doe"
}
]
},
{
"teamName": "Beta",
"members": [
{
"firstName": "John",
"lastName": "Doe"
}
]
}
]
searchTerm = 'John Doe';
console.log(teams.filter(team =>
team.members.some(member =>
(member.firstName + ' ' + member.lastName).includes(searchTerm)
)
));
【问题讨论】:
-
您的过滤器会过滤掉没有名为
John Doe的成员的团队。它不会过滤团队成员。 -
你的新
"members": [完全没有意义。由于您已经知道要找谁,所以像["Alpha", "Beta"]这样的简单结果似乎更好。或者更确切地说:{teams: [], member: {}} -
目前这个问题对我来说还不清楚。您是要仅过滤成员并始终列出所有团队,还是要过滤成员和团队。如果搜索
Jane Doe,预期的结果是什么? -
我需要保留用户所属的前端团队,所以如果我要寻找 Jane Doe,我希望结果返回为:``` [ { " teamName": "Alpha", "members": [ { "firstName": "Jan", "lastName": "Doe" } ] } ] ```
标签: javascript arrays