原理:一维数组和二维数组做比较合并去重
1、数据
function mockData() {
const currentDate = moment(new Date()).date(), // 当天是几号
currentMDays = moment(new Date()).daysInMonth(), //当前月天数
year = moment(new Date()).get('year'), //当前年
month = moment(new Date()).get('month') + 1; //当前年月
let newData = []
for(let i = currentDate; i <= currentMDays; i++) {
newData.push({date: `${year}-${month}-${i}`})
}
return newData
}
const apiData = [
[{date: '2022-10-25', number: 100}, {date: '2022-10-25', number: 200}],
[{date: '2022-10-28', number: 10}, {date: '2022-10-25', number: 20}]
]
2、去重合并方法
function findAndReplace2(sourceArr, targetArr){
const arr2 = [];
sourceArr.forEach((sourceObj) => {
if (sourceObj.date === targetArr[0].date) {
arr2.push(...targetArr)
} else {
arr2.push(sourceObj)
}
})
return arr2
}
function mergeData(sourceArr, targetArr){
let result = []
targetArr.forEach(arr => {
result = findAndReplace2(result.length === 0 ? sourceArr: result, arr)
})
let arr = []
let tmp = []
for (let i = 0,j = 1; i <= result.length - 2 ; i++, j++) {
if ((result[i].date) === result[j].date) {
tmp.push(result[i])
} else {
tmp.push(result[i])
arr.push(tmp)
tmp = []
}
if (j == result.length - 1) {
tmp.push(result[j])
arr.push(tmp)
}
}
return arr;
}
3、合并去重
const newList = mergeData(mockData(), apiData)
mockData() // [{date: '2022-10-21'}, {date: '2022-10-...'}, {date: '2022-10-31'}}
newList 最终为 [
[{date: '2022-10-21'}],
[{date: '2022-10-22'}],
[{date: '2022-10-23'}],
[{date: '2022-10-24'}],
[{date: '2022-10-25', number: 100}, {date: '2022-10-25', number: 200}],
[{date: '2022-10-26'}],
[{date: '2022-10-27'}],
[{date: '2022-10-28', number: 10}, {date: '2022-10-28', number: 20}],
[{date: '2022-10-29'}],
[{date: '2022-10-20'}],
[{date: '2022-10-31'}],
]