简体   繁体   English

如何将对象数组转换为数组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM