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);
输出的结果与您提供的期望结果相同。