问题描述:
后台返回给前端的时间(ywDate)是无序的,有的营销部门周 可能是断断断续续的
需求:
1.本部门没有的日期(ywDate) 但在其他部门有, 就需要把其他部门的时间日期(ywDate) 填充到这个部门 并设置(sale)为 0
2.在部门里面 按照时间 从小到大的顺序排序
var obj = {
营销一部: [{
ywDate: '2020年 第1周',
sale: 50
},
{
ywDate: '2021年 第14周',
sale: 61
},
{
ywDate: '2020年 第20周',
sale: 47
},
{
ywDate: '2020年 第10周',
sale: 27
},
],
营销五部: [{
ywDate: '2021年 第7周',
sale: 80
},
{
ywDate: '2020年 第20周',
sale: 20
},
{
ywDate: '2020年 第4周',
sale: 90
},
{
ywDate: '2021年 第15周',
sale: 80
},
],
营销四部: [{
ywDate: '2020年 第2周',
sale: 20
},
{
ywDate: '2021年 第14周',
sale: 30
},
{
ywDate: '2021年 第8周',
sale: 80
},
{
ywDate: '2020年 第3周',
sale: 10
},
]
}
function format(obj) {
let snDateList = []; // 处理后的周
// 获取 年周的所有数组
for (let key in obj) {
let list = obj[key]
for (let i = 0; i < list.length; i++) {
snDateList.push(list[i].ywDate)
}
}
// 获把 年周的所有数组 去重
snDateList = Array.from(new Set(snDateList));
let isCharList = [];
// 填充数组
for (let key in obj) {
let list = obj[key]
let arr = []; // 获取每个部门的 年周
let snDateListCopy = [...snDateList]
for (let i = 0; i < list.length; i++) {
let item = list[i];
arr.push(item.ywDate)
}
// 在单个部门的年周里遍历,这个部门的年周是否包含在所有部门的年周里,有就在所有部门里删除这个年周
for (let i = 0; i < arr.length; i++) {
let index = snDateListCopy.indexOf(arr[i])
if (index > -1) {
// 在所有数组里 找该部门的年周,找到了 就删除掉,得到的是该部门没有的组
snDateListCopy.splice(index, 1)
} else {
// 在所有数组里 找该部门的年周,没找到了,得到是该部门的数组
}
}
// snDateListCopy 处理后 得到是 除了该部门之外的年周 需要统一把sales设置为0
for (let i = 0; i < snDateListCopy.length; i++) {
list.push({
ywDate: snDateListCopy[i],
sale: 0,
})
}
// list 除了该部门之外的年周(设置为0) + 本部门的年周(有值) = 该部门填充后的数据(还未排序)
obj[key] = list;
}
// 填充了数据后,需要按照时间排序数组
for (let key in obj) {
let list = obj[key];
for (let i = 0; i < list.length; i++) {
let item = list[i];
item.weekSort = item.ywDate.replace(/[^0-9]/gi, "");
let year = item.ywDate.match(/(\S*)年/)[1] * 1;
let weeks = item.ywDate.match(/第(\S*)周/)[1] * 1;
weeks = weeks > 9 ? weeks : ('0' + weeks);;
item.weekSort = year + "" + weeks; // 周是个位,没有0加上0
// item.weekSort = item.weekSort.length == 6 ? item.weekSort : item.weekSort.replace(/(.{4})(.{1})/, "$10$2");
}
list.sort((a, b) => {
return a.weekSort - b.weekSort; // 从小到大排序
});
};
return obj
}
let objs = format(obj)
console.log(objs)