Javascript 利用u.map和._groupBy用lodash重新构造阵列
我希望用lodash重新构造一组对象 我一直在尝试改编许多在网上找到的例子,但没有任何运气。似乎我必须使用Javascript 利用u.map和._groupBy用lodash重新构造阵列,javascript,arrays,lodash,Javascript,Arrays,Lodash,我希望用lodash重新构造一组对象 我一直在尝试改编许多在网上找到的例子,但没有任何运气。似乎我必须使用.map和\u groupBy的组合,但我真的不能完全理解这一点 感谢您的帮助 初始数组: const条目=[ { 年份:2019年, 儿童:[ {名称:'red',金额:1,标签:'color'}, {名称:'黄色',金额:20,标签:'颜色'}, {名称:'绿色',数量:12,标签:'颜色'}, ], }, { 年份:“2020年”, 儿童:[ {名称:'red',金额:1,标签:'co
.map
和\u groupBy
的组合,但我真的不能完全理解这一点
感谢您的帮助
初始数组:
const条目=[
{
年份:2019年,
儿童:[
{名称:'red',金额:1,标签:'color'},
{名称:'黄色',金额:20,标签:'颜色'},
{名称:'绿色',数量:12,标签:'颜色'},
],
},
{
年份:“2020年”,
儿童:[
{名称:'red',金额:1,标签:'color'},
{名称:“黄色”,数量:3,标签:“颜色”},
],
},
]
重组阵列:
[
{
id:'红色',
数据:[
{年份:'2019',金额:1},
{年份:'2020',金额:1},
],
},
{
id:'黄色',
数据:[
{年份:'2019',金额:20},
{年份:'2020',金额:3},
],
},
{
id:'绿色',
数据:[
{年份:'2019',金额:12},
],
},
]
可能有很多不同的方法,但是,我发现最好的方法是:
const条目=[
{
年份:2019年,
儿童:[
{名称:'red',金额:1,标签:'color'},
{名称:'黄色',金额:20,标签:'颜色'},
{名称:'绿色',数量:12,标签:'颜色'},
],
},
{
年份:“2020年”,
儿童:[
{名称:'red',金额:1,标签:'color'},
{名称:“黄色”,数量:3,标签:“颜色”},
],
},
]
//第一步
让flattedChildren=uuz.flatMap(条目,e=>e.children.map(c=>{return{……c,year:e.year}));
//步骤2
让entryMap=u.groupBy(flattedChildren,“name”);
//步骤3
让mapEntries=\ u0.entries(entryMap);
//步骤4
让result=..map(mapEntries,([id,items])=>{return{id,data:items.map(item=>.[uu.pick(item,[“amount”,“year”]))});
日志(“结果:”,结果);
您可以使用flatMap
、groupBy
和映射链接整个操作
const entries=[{year:'2019',children:[{name:'red',amount:1,label:'color'},{name:'year:'green',amount:12,label:'color'},{year:'2020',children:[{name:'red amount 1,label:'color'},{name:'year:'year',amount 3,label:'color'}],
结果=(条目)
.flatMap({year,children})=>{.map(children,{name:id,amount})=>({year,id,amount})))
.groupBy('id'))
.map((数据,id)=>({id,数据:}.map(数据,({year,amount})=>({year,amount})))
.value();
控制台日志(结果)代码>
。作为控制台包装{最大高度:100%!重要;顶部:0;}