给定一个对象数组:
var projects = [
{
id: 1,
name: 'Trader Portal'
},
{
id: 2,
name: 'Risk Engine'
},
];
将其转换为以下结构的最优雅方法是什么——本质上是 ID 数组以及对象映射:
{
projects: [
1,
2
],
projectMap: {
1: {
id: 1,
name: 'Trader Portal'
},
2: {
id: 2,
name: 'Risk Engine'
}
}
}
我使用下划线(见下文或我的 codepen )做到了这一点,但有更好的方法吗?例如,这可以使用函数式编程以更具声明性的方式完成吗?有没有一种方法可以通用化代码以处理任何类型对象的数组?
var projects = [
{
id: 1,
name: 'Trader Portal'
},
{
id: 2,
name: 'Risk Engine'
},
];
var result = {};
result.projects = _.map(projects, function(project) {
return project.id;
});
result.projectMap = {};
_.each(projects, function(project) {
result.projectMap[project.id] = project;
});
console.log(JSON.stringify(result));
最佳答案
如果您只对 @jeremija 中的第二个示例感兴趣,那么 Ramda 有一个内置函数,indexBy
,您可以使用 like this :
R.indexBy(R.prop('id'), projects);
关于JavaScript - 将数组转换为 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37657865/