# 数据比对
const isObject = (v: any) => typeof v === 'object' && v !== null;
const isArray = (v: any) => Array.isArray(v);
export const isEmpty = (v: any) => (v === undefined || v === null || v === '' || (Array.isArray(v) && !v.length));
const diffValue = (before: any, after: any): boolean => {
if (isArray(before) && isArray(after)) {
const filterBefore = before.filter((v: any) => !isEmpty(v));
const filterAfter = after.filter((v: any) => !isEmpty(v));
if (filterBefore.length !== filterAfter.length) {
return true;
}
let isDiff = false;
for (const key in filterBefore) {
isDiff = diffValue(filterBefore[key], filterAfter[key]);
if (isDiff) {
break;
}
}
return isDiff;
} else if (isObject(before) && isObject(after)) {
const filterBeforeKeys = Object.keys(before).filter((k: any) => !isEmpty(before[k]));
const filterAfterKeys = Object.keys(after).filter((k: any) => !isEmpty(after[k]));
if (filterBeforeKeys.length !== filterAfterKeys.length) {
return true;
}
let isDiff = false;
for (const key of filterBeforeKeys) {
isDiff = diffValue(before[key], after[key]);
if (isDiff) {
break;
}
}
return isDiff;
} else {
if (isEmpty(before) && isEmpty(after)) {
return false;
} else {
return before !== after;
}
}
};
export default diffValue;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48