[英]How can I convert an array of object to an array
I have an array of objects:我有一个对象数组:
jobs: {
tasks:
{
Clean:[
{time: "08:00", task: 'floor 1'},
{time: "09:00", task: 'floor 2'}
],
Print:[
{time: "10:00", task: 'x files'},
{time: "11:00", task: 'x files 2.0'}
]
}
}
I need to convert the data to something like this我需要将数据转换为这样的
this.listTimeJob.Clean = ['','','','','','','', '','floor 1','floor 2','','','','','','','','','','','','','','',''];
this.listTimeJob.Print = ['','','','','','','','','','','x files','x files 2.0','','','','','','','','','','','','',''];
so I can loop through and have as a result所以我可以循环并得到结果
I'm really stuck with this, I still trying to figure this out.. if anybody can give a little help I really appreciate..我真的坚持这一点,我仍在努力解决这个问题..如果有人能提供一点帮助,我真的很感激..
You can use Array.prototype.reduce
, pass accumulator as Array(24).fill("")
and with each iteration change the value of accumulator's index based on the time value.您可以使用Array.prototype.reduce
,将累加器作为Array(24).fill("")
传递,并在每次迭代时根据时间值更改累加器索引的值。
var cleanData = data.jobs.tasks.Clean.reduce(
(acc, el, i) => {
var index = +el.time.split(":")[0];
acc[index] = el.task;
return acc;
}, Array(24).fill("")
);
var data = { jobs: { tasks: { Clean: [{ time: "08:00", task: 'floor 1' }, { time: "09:00", task: 'floor 2' } ], Print: [{ time: "10:00", task: 'x files' }, { time: "11:00", task: 'x files 2.0' } ] } } } var cleanData = data.jobs.tasks.Clean.reduce( (acc, el, i) => { var index = +el.time.split(":")[0]; acc[index] = el.task; return acc; }, Array(24).fill("") ); var printData = data.jobs.tasks.Print.reduce( (acc, el, i) => { var index = +el.time.split(":")[0]; acc[index] = el.task; return acc; }, Array(24).fill("") ); console.log(cleanData); console.log(printData)
I would create two arrays with all the empty data in them then loop through your tasks and get the time to use as the index:我会创建两个数组,其中包含所有空数据,然后循环执行您的任务并获得用作索引的时间:
this.listTimeJob.Clean = [];
this.listTimeJob.Print = [];
for (var x = 0; x < 25; x++) {
this.listTimeJob.Clean.push("");
this.listTimeJob.Print.push("");
}
for (var y = 0; y < jobs.tasks.Clean.length; y++){
var index = parseInt(jobs.tasks.Clean[y].time.split(":"), 10);
this.listTimeJob.Clean[index] = jobs.tasks.Clean[y].task
}
for (var y = 0; y < jobs.tasks.Print.length; y++){
var index = parseInt(jobs.tasks.Print[y].time.split(":"), 10);
this.listTimeJob.Print[index] = jobs.tasks.Print[y].task
}
My plain JS version我的纯 JS 版本
var jobs = { tasks: { Clean:[ {time: "08:00", task: 'floor 1'}, {time: "09:00", task: 'floor 2'} ], Print:[ {time: "10:00", task: 'x files'}, {time: "11:00", task: 'x files 2.0'} ] } } function pad(num) { return ("0"+num).slice(-2); } var th = document.querySelector("#th"), tb = document.querySelector("#tb"), time=[], clean = new Array(24), print = new Array(24), tasks=jobs.tasks; for (var i=0;i<24;i++) { // from 00:00 to 23:00 time.push(""+pad(i)+":00") } for (var j=0;j<tasks.Clean.length;j++) { clean[parseInt(tasks.Clean[j].time)]=tasks.Clean[j].task; } for (var j=0;j<tasks.Print.length;j++) { print[parseInt(tasks.Print[j].time)]=tasks.Print[j].task; } th.innerHTML="<tr><th>"+time.join("</th><th>")+"</th></tr>"; tb.innerHTML="<tr><td>"+clean.join("</td><td>")+"</td></tr>"; tb.innerHTML+="<tr><td>"+print.join("</td><td>")+"</td></tr>";
td { border:1px solid black }
<table> <thead id="th"></thead> <tbody id="tb"></tbody> </table>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.