【发布时间】:2016-03-02 18:44:50
【问题描述】:
我有点进入函数式编程。我的问题是关于如何从嵌套数据中映射信息。
我有很多公司。
[
{
_id: 123,
name: "Company"
},
{
_id: 789,
name: "Company"
}
];
我有很多团队。
[
{
_id: 555,
name: "Team name A",
companyId: 123
},
{
_id: 666,
name: "Team name B",
companyId: 123
},
{
_id: 777,
name: "Team name C",
companyId: 789
}
];
我想将每个公司的团队放入公司对象中。预期结果是:
[
{
_id: 123,
name: "Company",
teams: [
{
_id: 555,
name: "Team name A",
companyId: 123
},
{
_id: 666,
name: "Team name B",
companyId: 123
}
]
},
{
_id: 789,
name: "Company",
teams: [
{
_id: 777,
name: "Team name A",
companyId: 789
}
]
}
];
我的解决方案是分几个步骤进行:
teamsGroupedByCompany = _.group(teams, 'companyId');
var findTeamsByCompanyId = function(groupedTeams, companyId){
return _.chain(groupedTeams)
.find(function(value, key){
return companyId == key;
})
.flatten()
.defaults([])
.value();
}
_.map(companies, function(company){
company.team = findTeamsByCompanyId(teamsGroupedByCompany, company._id);
})
是否可以以链接方式完成,或者我必须创建高阶函数来处理这类问题?目前我正在使用 lodash。
这里是 jsbin https://jsbin.com/buqiji/edit?js,console
【问题讨论】:
标签: functional-programming lodash