Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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_Arrays_Json_Lodash - Fatal编程技术网

Javascript 使用lodash透视数据

Javascript 使用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 } ]

我需要将init数组转换为最终数组,最好使用lodash

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令人惊叹的谢谢