Javascript 将数据从这个数组推送到另一个数组使用最少的循环
我想将数据从“data2”数组配置为“dataConvert”数组 我想找到另一种优化的方法Javascript 将数据从这个数组推送到另一个数组使用最少的循环,javascript,Javascript,我想将数据从“data2”数组配置为“dataConvert”数组 我想找到另一种优化的方法 let dataConvert = []; data2 = [ { time: "2020-7", tasks: [ { key: "p1", value: 15 }, { key: "p2", value: 13
let dataConvert = [];
data2 = [
{
time: "2020-7",
tasks: [
{
key: "p1",
value: 15
},
{
key: "p2",
value: 13
},
]
},
{
time: "2020-8",
tasks: [
{
key: "p1",
value: 16
},
{
key: "p2",
value: 19
},
]
},
{
time: "2020-9",
tasks: [
{
key: "p1",
value: 12
},
{
key: "p2",
value: 93
},
]
}
]
let dateConvert = [], valueConvert = [];
data2.forEach(x=>{
let date = new Date(x.time);
if (date) {
let getYear = date.getFullYear();
let getMonth = date.getMonth() + 1;
let newDate = `${getYear}-${getMonth}-1`;
return dateConvert = [...dateConvert, newDate];
}
})
dateConvert.unshift("x");
// get p1 p2 value
let allTasks = data2.flatMap(x => x.tasks);
valueConvert = Object.values(allTasks.reduce((arr, item) => {
arr[item.key] = arr[item.key] || [item.key];
arr[item.key].push(item.value);
return arr;
}, {}));
dataConvert = [...[dateConvert], ...valueConvert];
将数据添加到“dataConvert”数组后,“dataConvert”的格式如下:
dataConvert = [
["x","2020-7", "2020-8", "2020-9"],
["p1", 15, 16, 12],
["p2", 13, 19, 93]
]
我尝试使用reduce
,我想找到另一种优化方法
let dataConvert = [];
data2 = [
{
time: "2020-7",
tasks: [
{
key: "p1",
value: 15
},
{
key: "p2",
value: 13
},
]
},
{
time: "2020-8",
tasks: [
{
key: "p1",
value: 16
},
{
key: "p2",
value: 19
},
]
},
{
time: "2020-9",
tasks: [
{
key: "p1",
value: 12
},
{
key: "p2",
value: 93
},
]
}
]
let dateConvert = [], valueConvert = [];
data2.forEach(x=>{
let date = new Date(x.time);
if (date) {
let getYear = date.getFullYear();
let getMonth = date.getMonth() + 1;
let newDate = `${getYear}-${getMonth}-1`;
return dateConvert = [...dateConvert, newDate];
}
})
dateConvert.unshift("x");
// get p1 p2 value
let allTasks = data2.flatMap(x => x.tasks);
valueConvert = Object.values(allTasks.reduce((arr, item) => {
arr[item.key] = arr[item.key] || [item.key];
arr[item.key].push(item.value);
return arr;
}, {}));
dataConvert = [...[dateConvert], ...valueConvert];
谢谢。您可以使用嵌套循环并将索引存储在对象中,以便更快地访问
键
const
数据=[{time:“2020-7”,任务:[{key:“p1”,值:15},{key:“p2”,值:13}],{time:“2020-8”,任务:[{key:“p1”,值:16},{key:“p2”,值:19}],{time:“2020-9”,任务:[{key:“p1”,值:12},{key:“p2”,值:93}],
dataConvert=[['x']],
指数={};
data.forEach(o=>{
数据转换[0]。推送(o.time);
o、 tasks.forEach(({key,value})=>{
如果(!(输入索引))索引[key]=dataConvert.push([key])-1;
数据转换[索引[键]]。推送(值);
});
});
console.log(dataConvert)代码>
.as console wrapper{max height:100%!important;top:0;}
几个小时前你没有问过同样的问题吗?@Barmar问题已经结束,没有人回答。当你添加代码时,我投票决定重新打开它。你应该更有耐心。如果代码有效,并且你正在寻找改进建议,那么这是一个合适的地方。但请先看。