Javascript 使用lodash透视数据
我需要将init数组转换为最终数组,最好使用lodashJavascript 使用lodash透视数据,javascript,arrays,json,lodash,Javascript,Arrays,Json,Lodash,我需要将init数组转换为最终数组,最好使用lodash initArray = [ { "date":"2017-08-15", "data":[ { "color":"orange", "count":100 }, { "color":"green", "count":101 } ]
initArray = [
{
"date":"2017-08-15",
"data":[
{
"color":"orange",
"count":100
},
{
"color":"green",
"count":101
}
]
},
{
"date":"2017-08-14",
"data":[
{
"color":"orange",
"count":102
},
{
"color":"green",
"count":103
}
]
}
]
finalArray = [
{
"color":"orange",
"data":[
100,
102
]
},
{
"color":"green",
"data":[
101,
103
]
}
]
可以使用
reduce
展平原始数组,以便所有数据数组位于同一级别。然后使用u.transform获得一个临时对象,将颜色映射到它们的计数数组。然后,您可以使用forEach将内容推送到finalArray
var initArray=[
{
“日期”:“2017-08-15”,
“数据”:[
{
“颜色”:“橙色”,
“计数”:100
},
{
“颜色”:“绿色”,
“计数”:101
}
]
},
{
“日期”:“2017-08-14”,
“数据”:[
{
“颜色”:“橙色”,
“计数”:102
},
{
“颜色”:“绿色”,
“计数”:103
}
]
}
];
var finalArray=[];
var temp=u.transform(initArray.reduce((a,b)=>a.data.concat(b.data)),
(r,v)=>(r[v.color]| |(r[v.color]=[])).push(v.count),{};
_.forEach(temp,(v,k)=>finalArray.push({color:k,count:v}));
控制台日志(finalArray)代码>
您可以使用reduce
展平原始数组,以便所有数据数组位于同一级别。然后使用u.transform获得一个临时对象,将颜色映射到它们的计数数组。然后,您可以使用forEach将内容推送到finalArray
var initArray=[
{
“日期”:“2017-08-15”,
“数据”:[
{
“颜色”:“橙色”,
“计数”:100
},
{
“颜色”:“绿色”,
“计数”:101
}
]
},
{
“日期”:“2017-08-14”,
“数据”:[
{
“颜色”:“橙色”,
“计数”:102
},
{
“颜色”:“绿色”,
“计数”:103
}
]
}
];
var finalArray=[];
var temp=u.transform(initArray.reduce((a,b)=>a.data.concat(b.data)),
(r,v)=>(r[v.color]| |(r[v.color]=[])).push(v.count),{};
_.forEach(temp,(v,k)=>finalArray.push({color:k,count:v}));
控制台日志(finalArray)代码>
这样看来,洛达斯的电话对我来说很有意义
//var\uz=require('lodash'))
initArray=[
{
“日期”:“2017-08-15”,
“数据”:[
{
“颜色”:“橙色”,
“计数”:100
},
{
“颜色”:“绿色”,
“计数”:101
}
]
},
{
“日期”:“2017-08-14”,
“数据”:[
{
“颜色”:“橙色”,
“计数”:102
},
{
“颜色”:“绿色”,
“计数”:103
}
]
}
]
结果=(initArray)
//.map('数据')
//.flatte()
.flatMap('data')//而不是.map('data')。flatte()
.groupBy('color'))
.map((项目、键)=>({
颜色:键,
计数:u.map(项“计数”)
}))
.value()
console.log(结果)
这样看来,洛达斯的电话对我来说很有意义
//var\uz=require('lodash'))
initArray=[
{
“日期”:“2017-08-15”,
“数据”:[
{
“颜色”:“橙色”,
“计数”:100
},
{
“颜色”:“绿色”,
“计数”:101
}
]
},
{
“日期”:“2017-08-14”,
“数据”:[
{
“颜色”:“橙色”,
“计数”:102
},
{
“颜色”:“绿色”,
“计数”:103
}
]
}
]
结果=(initArray)
//.map('数据')
//.flatte()
.flatMap('data')//而不是.map('data')。flatte()
.groupBy('color'))
.map((项目、键)=>({
颜色:键,
计数:u.map(项“计数”)
}))
.value()
console.log(结果)
lodash拼图很有趣,但下次请尝试解释您尝试了什么以及为什么它不起作用。lodash拼图很有趣,但下次请尝试解释您尝试了什么以及为什么它不起作用。考虑到可读性和适当的方法用法,我甚至可能会说这是“正确”的方法。您可以更改map('data')).flant()
到flatMap('data')
@ryeballar nice!考虑到可读性和适当的方法使用,我甚至可以说这是一种“正确”的方法。您可以将map('data').flatte()更改为flatMap('data')
@ryeballar nice@太棒了!Thanks@ptpaterson令人惊叹的谢谢