Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 通过Lodash从阵列创建对象的贴图_Javascript_Lodash - Fatal编程技术网

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