Functional programming Lodash-使用嵌套对象信息从数组扩展对象
我有点喜欢函数式编程。我的问题是如何从嵌套数据映射信息 我有很多公司Functional programming Lodash-使用嵌套对象信息从数组扩展对象,functional-programming,lodash,Functional Programming,Lodash,我有点喜欢函数式编程。我的问题是如何从嵌套数据映射信息 我有很多公司 [ { _id: 123, name: "Company" }, { _id: 789, name: "Company" } ]; 我有一系列的团队 [ { _id: 555, name: "Team name A", companyId: 123 }, { _id: 666, name: "Team name B
[
{
_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下面的代码将实现这个技巧
companies = _.chain(companies)
.map(function(company) {
company.teams = _.filter(teams, {'companyId': company._id});
return company;
})
.value();
这里有一个JsBin:我的解决方案与你的类似。我也分两步来做 您已经有了
teamsGroupedByCompany
,因此您可以使用它直接为每个公司分配团队,而无需执行findTeamsByCompanyId
。以下是我的解决方案:
(假设公司
和团队
已经初始化)
const groupedTeams = _.groupBy(teams, 'companyId');
const combined = _.map(companies, c => {
c.teams = groupedTeams[c._id] || [];
return c;
});