数据转换
方案一
const calculateChanges = (before: DataItem[], after: DataItem[]) => {
const result: DataItem[] = [];
before.forEach(beforeItem => {
const afterItem = after.find(item => item.id === beforeItem.id);
if (!afterItem) {
result.push({ ...beforeItem, changeType: 'delete' });
} else if (JSON.stringify(beforeItem) !== JSON.stringify(afterItem)) {
result.push({ ...afterItem, changeType: 'update' });
} else {
result.push(beforeItem);
}
});
after.forEach(afterItem => {
if (!before.find(item => item.id === afterItem.id)) {
result.push({ ...afterItem, changeType: 'add' });
}
});
return _.groupBy(result.filter(item => item.changeType), 'changeType');
}
方案二(优化)
const calculateChanges = (before: DataItem[], after: DataItem[]) => {
const result: DataItem[] = [];
before.forEach(beforeItem => {
const afterItem = after.find(item => item.id === beforeItem.id);
if (!afterItem) {
result.push({ ...beforeItem, changeType: 'delete' });
} else if (!_.isEqual(beforeItem, afterItem)) {
result.push({ ...afterItem, changeType: 'update' });
} else {
result.push(beforeItem);
}
});
after.forEach(afterItem => {
if (!before.find(item => item.id === afterItem.id)) {
result.push({ ...afterItem, changeType: 'add' });
}
});
return _.groupBy(result.filter(item => item.changeType), 'changeType');
};