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=[
{
day:2021-1-1,
children:[
{
time:00:00,
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},
],
}
]
}
]
```javascript
```
let List = [];
for (let i = 0; i < arr.length; i++) {
let item = arr[i];
let dayIndex = -1;
for (let j = 0; j < List.length; j++) {
if (List[j].day === item.day) {
dayIndex = j;
break;
}
}
if (dayIndex === -1) {
List.push({
day: item.day,
children: []
});
dayIndex = List.length - 1;
}
let timeIndex = -1;
for (let j = 0; j < List[dayIndex].children.length; j++) {
if (List[dayIndex].children[j].time === item.time) {
timeIndex = j;
break;
}
}
if (timeIndex === -1) {
List[dayIndex].children.push({
time: item.time,
children: []
});
timeIndex = List[dayIndex].children.length - 1;
}
List[dayIndex].children[timeIndex].children.push(item);
}
该回答引用GPTᴼᴾᴱᴺᴬᴵ
可以使用 JavaScript 中的 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 List = arr.reduce((result, item) => {
// 根据日期查找是否已经存在该日期的数据
let date = result.find(date => date.day === item.day);
if (!date) {
// 如果不存在,就创建一个新的日期节点
date = {
day: item.day,
children: []
};
result.push(date);
}
// 根据时间查找是否已经存在该时间段的数据
let time = date.children.find(time => time.time === item.time);
if (!time) {
// 如果不存在,就创建一个新的时间段节点
time = {
time: item.time,
children: []
};
date.children.push(time);
}
// 将当前的数据节点添加到时间段节点的子节点数组中
time.children.push({
day: item.day,
day1: item.day1,
time: item.time,
name: item.name
});
return result;
}, []);
console.log(List);
解释一下: