Javascript 通过Lodash从阵列创建对象的贴图
我有以下数组,由Javascript 通过Lodash从阵列创建对象的贴图,javascript,lodash,Javascript,Lodash,我有以下数组,由名称、年龄和部门 [[ "Kevin", 22,"Psychology" ], [ "Cathy", 26, "Psychology" ], [ "David", 31, "Engineering" ], [ "Christine", 23, "Engineering" ]] 我想基于唯一的部门创建一个地图,如下所示: { Psychology: [ { name: "Cathy", age: 26 }, { name: "Kevin", age: 22 } ]
名称
、年龄
和部门
[[ "Kevin", 22,"Psychology" ],
[ "Cathy", 26, "Psychology" ],
[ "David", 31, "Engineering" ],
[ "Christine", 23, "Engineering" ]]
我想基于唯一的部门创建一个地图,如下所示:
{ Psychology: [
{ name: "Cathy", age: 26 },
{ name: "Kevin", age: 22 } ]
},
{ Engineering: [
{ name: "Christine", age: 23 },
{ name: "David", age: 31 } ]
}
数组中部门
的索引将始终相同。如何利用lodash
?在不使用外部库的情况下实现这一点,使用像这样的新东西非常简单
const数据=[
[“凯文”,22,“心理学”],
[“Cathy”,26,“心理学”],
[“大卫”,31,“工程”],
[“Christine”,23,“Engineering”];
常数结果=数据减少((a,v)=>{
常数[姓名、年龄、部门]=v;
(a[dept]=a[dept]| |[])push({name,age});
返回a;
}, {});
控制台日志(结果)代码>在不使用外部库的情况下,使用像这样的新ESNext工具非常容易
const数据=[
[“凯文”,22,“心理学”],
[“Cathy”,26,“心理学”],
[“大卫”,31,“工程”],
[“Christine”,23,“Engineering”];
常数结果=数据减少((a,v)=>{
常数[姓名、年龄、部门]=v;
(a[dept]=a[dept]| |[])push({name,age});
返回a;
}, {});
控制台日志(结果)代码>以下是一个lodash解决方案:
const{flow,groupBy,nth,mapValues,map,zipObject}=_
常量转换=流(
people=>groupBy(people,p=>nth(p,2)),
分组=>mapValues(分组,部门=>map(
部,
person=>zipObject(['name','age'],person)
))
)
康斯特人=[“凯文”,22岁,“心理学”],[“凯西”,26岁,“心理学”],[“大卫”,31岁,“工程学”],[“克里斯汀”,23岁,“工程学”]
console.log(转换(人员))
以下是一个lodash解决方案:
const{flow,groupBy,nth,mapValues,map,zipObject}=_
常量转换=流(
people=>groupBy(people,p=>nth(p,2)),
分组=>mapValues(分组,部门=>map(
部,
person=>zipObject(['name','age'],person)
))
)
康斯特人=[“凯文”,22岁,“心理学”],[“凯西”,26岁,“心理学”],[“大卫”,31岁,“工程学”],[“克里斯汀”,23岁,“工程学”]
console.log(转换(人员))
这太棒了!不幸的是,我一直使用IE,无法集成Babel来转换这个脚本(因此我引入了lodash)。从来没有听说过这个ESNext,不过,我会去看看幸运的是巴贝尔有一个es5转换器!我会尝试一下,让你知道EsNext只是现代Javascript的另一种说法,我永远记不起是否有功能出现在2015年、2017年等,所以我只说EsNext.:)<代码>这太棒了!不幸的是,我一直使用IE,这不是问题,任何严肃的JS开发人员都会有某种形式的构建过程webpack
是一个不错的选择,如果你现在还没有这样做的话。而且它看起来并没有使用任何特别现代的东西。它应该适用于最新的IEs,甚至一些较旧的IEs。@ScottSauyet在这里没有做太多测试,但这个片段在IE11上失败了。很可能是因为对象速记{name,age}
和数组分解[name,age,dept]=v
这太棒了!不幸的是,我一直使用IE,无法集成Babel来转换这个脚本(因此我引入了lodash)。从来没有听说过这个ESNext,不过,我会去看看幸运的是巴贝尔有一个es5转换器!我会尝试一下,让你知道EsNext只是现代Javascript的另一种说法,我永远记不起是否有功能出现在2015年、2017年等,所以我只说EsNext.:)<代码>这太棒了!不幸的是,我一直使用IE,这不是问题,任何严肃的JS开发人员都会有某种形式的构建过程webpack
是一个不错的选择,如果你现在还没有这样做的话。而且它看起来并没有使用任何特别现代的东西。它应该适用于最新的IEs,甚至一些较旧的IEs。@ScottSauyet在这里没有做太多测试,但这个片段在IE11上失败了。很可能是因为对象速记{name,age}
和数组分解[name,age,dept]=v