这个结构怎么转换呢?



let arr = [
                                        {day:2021-1-1,day1:'全天',time:00:00,name:123},
                                        {day:2021-1-1,day1:'全天',time:00:00,name:456},
                                        {day:2021-1-1,day1:'非全天',time:10:00,name:789},
                                        {day:2021-1-2,day1:'非全天',time:10:00,name:777},
                                        {day:2021-1-2,day1:'非全天',time:10:00,name:888},
               ]

如果是全天的time则是全天,children中则是全天的数据
运行结果


let List=[
                                        {
                                            day:2021-1-1,
                                           children:[
                                               {
                                                    time:全天,
                                                    children:[
                                                        {day:2021-1-1,day1:'全天',time:00:00,name:123},
                                                        {day:2021-1-1,day1:'全天',time:00:00,name:456},
                                                    ],
                                                },
                                                {
                                                    time:10:00,
                                                    children:[
                                                        {day:2021-1-1,day1:'非全天',time:10:00,name:789},
                                                    ]
                                                }
                                           ],
                                        },
                                        {
                                            day:2021-1-2,
                                            children:[
                                                {
                                                    time:10:00,
                                                    children:[
                                                        {day:2021-1-2,day1:'非全天',time:10:00,name:777},
                                                        {day:2021-1-2,day1:'非全天',time:10:00,name:888},
                                                    ],
                                                }
                                            ]
                                        }
                                    ]


基于GPT回答:请参考
您可以使用 JavaScript 中的数组遍历方法和对象操作来实现该转换。以下是一个示例代码,可以将原始数组转换为目标格式:

let arr = [
  {day:'2021-1-1',day1:'全天',time:'00:00',name:123},
  {day:'2021-1-1',day1:'全天',time:'00:00',name:456},
  {day:'2021-1-1',day1:'非全天',time:'10:00',name:789},
  {day:'2021-1-2',day1:'非全天',time:'10:00',name:777},
  {day:'2021-1-2',day1:'非全天',time:'10:00',name:888},
];

let List = [];

// 遍历原始数组,按照日期和时间将数据分类存储
arr.forEach(item => {
  let dayItem = List.find(day => day.day === item.day);
  if (!dayItem) {
    dayItem = { day: item.day, children: [] };
    List.push(dayItem);
  }
  
  let timeItem = dayItem.children.find(time => time.time === item.day1);
  if (!timeItem) {
    timeItem = { time: item.day1, children: [] };
    dayItem.children.push(timeItem);
  }
  
  timeItem.children.push(item);
});

console.log(List);


解释:

定义一个空数组 List,用于存储转换后的数据。
遍历原始数组 arr,对于每个元素:
使用 List.find() 方法查找是否已经有该日期的数据。如果找不到,则创建一个新的日期项,并将其添加到 List 数组中。
在该日期的子数组 children 中查找是否已经有该时间的数据。如果找不到,则创建一个新的时间项,并将其添加到 children 中。
将当前元素添加到时间项的子数组 children 中。
完成遍历后,List 数组中的数据就已经转换为目标格式。
注意:上面代码中的日期和时间格式为字符串类型,应根据实际情况进行调整。同时,时间部分需要用字符串格式表示,不能直接使用数值类型。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
可以使用 JavaScript 中的 Array.reduce() 方法将原始数组转换为所需格式的数组。以下是一个示例代码:

let arr = [
  { day: '2021-1-1', day1: '全天', time: '00:00', name: 123 },
  { day: '2021-1-1', day1: '全天', time: '00:00', name: 456 },
  { day: '2021-1-1', day1: '非全天', time: '10:00', name: 789 },
  { day: '2021-1-2', day1: '非全天', time: '10:00', name: 777 },
  { day: '2021-1-2', day1: '非全天', time: '10:00', name: 888 }
];

let result = arr.reduce((acc, curr) => {
  let dayIndex = acc.findIndex(item => item.day === curr.day);
  if (dayIndex === -1) {
    acc.push({
      day: curr.day,
      children: [{
        time: curr.day1 === '全天' ? '全天' : curr.time,
        children: [curr]
      }]
    });
  } else {
    let timeIndex = acc[dayIndex].children.findIndex(item => item.time === (curr.day1 === '全天' ? '全天' : curr.time));
    if (timeIndex === -1) {
      acc[dayIndex].children.push({
        time: curr.day1 === '全天' ? '全天' : curr.time,
        children: [curr]
      });
    } else {
      acc[dayIndex].children[timeIndex].children.push(curr);
    }
  }
  return acc;
}, []);

console.log(result);


输出的结果与您提供的期望结果相同。