首先,后端返回的数据结构如下
list: [
{
id: '1', // id
studentName: '大长今', // 姓名
time: 2019-8 // 时间
},
{
id: '2', // id
studentName: '今后会', // 姓名
time: 2019-9 // 时间
},
{
id: '3', // id
studentName: '食客号', // 姓名
time: "2017-3" // 时间
},
{
id: '4', // id
studentName: '威海易', // 姓名
time: "2019-8" // 时间
}
],
期望得到的数据结构:
[{time:2019-9;[Array1]}, {{time:2019-8;[Array2]}, {{time:2017-3;[Array1]}]
list数组中的时间是我提前处理好的时间格式,接下来就是对time进行排序和去重,使时间降序排列没有重复
var date = [];
this.date = this.date.concat().sort().reverse();//降序
var last;
var dateList = [];
for (var i = 0, len = this.date.length; i < len; i++) {
// 如果是第一个元素或者下一个相同的元素
if (!i || last !== this.date[i]) {
this.dateList.push({time: this.date[i], list: []});
}
last = this.date[i];
}
//数组去重得到一个新的数组dateList console.log('dateList', this.dateList);
好,这个数据结构大致看来已经距离期望很近了,接下来就是把list里面的相同月份的项插入对应的dateList的空list里面
// 开始分组
this.list.forEach((item, index) => {
for (i = 0; i < this.dateList.length; i++) {
if (this.dateList[i].time === item.time) {
this.dateList[i].list.push(item);
}
}
});
console.log('dateList', this.dateList);
此时的dateList里面的list已经插入对应项
####升级方案:这个方案就是比上面的少了一步去重,此处的list应该是降序排序之后的list
var array = [];
for (let i = 0; i < this.list.length; i++) {
let time = this.list[i].time;
let index = this.array.findIndex((item) => {
return item.time === time;
});
if (index >= 0) {
this.array[index].list.push(this.list[i]);
} else {
this.array.push({time: time, list: [this.list[i]]});
}
}
console.log('array', this.array);
//处理得到dateList是按时间大小分组的结果;``