const [diffKeys, setDiffKeys] = useState({});
const dataDiff = (data1: any, data2: any) => { let diffKey: any = {}; for (const key in data1) { if (Array.isArray(data1[key])) { diffKey[key] = arrDiff(data1[key], data2[key], key, diffKey); } else if (typeof data1[key] === 'object') { diffKey[key] = objDiff(data1[key], data2[key], key); } else { // 直接比较 if ( (data1[key] || data1[key] === 0) && JSON.stringify(data1[key]) !== JSON.stringify(data2[key]) ) { diffKey = { ...diffKey, [key]: 'hightLight' }; } } } console.log(diffKey); setDiffKeys(diffKey); }; // Object.keys(obj); // 直接用json字符串对比?? const objDiff = (data1: any, data2: any, name: any, diffKey?: any) => { let _diffKey: any = {}; if (data2) { for (const key in data1) { if (Array.isArray(data1[key])) { const _data = arrDiff(data1[key], data2[key], key); _diffKey[key] = _data; } else if (typeof data1[key] === 'object') { const _data = objDiff(data1[key], data2[key], key); _diffKey[key] = _data; } else { if ( (data1[key] || data1[key] === 0) && JSON.stringify(data1[key]) !== JSON.stringify(data2[key]) ) { _diffKey = { ..._diffKey, [key]: 'hightLight' }; } } } } else { for (const key in data1) { if (Array.isArray(data1[key])) { const _data = arrDiff(data1[key], null, key); _diffKey[key] = _data; } else if (typeof data1[key] === 'object') { const _data = objDiff(data1[key], null, key); _diffKey[key] = _data; } else { _diffKey = { ..._diffKey, [key]: 'hightLight' }; } } } return _diffKey; }; const arrDiff = (data1: any, data2: any, name: any, diffKey?: any) => { let _diffKey: any = []; if (data2) { data1.forEach((item: any, index: any) => { const objKey = Object.keys(item); if (typeof item === 'object') { const _data = [objDiff(item, data2[index], name)]; _diffKey = _diffKey.concat(_data); } else { if (JSON.stringify(item) !== JSON.stringify(data2[index])) { _diffKey.push('hightLight'); } else { _diffKey.push(''); } } }); } else { data1.forEach((item: any, index: any) => { if (typeof item === 'object') { const _data = [objDiff(item, null, name)]; _diffKey = _diffKey.concat(_data); } else { _diffKey.push('hightLight'); } }); }
return _diffKey;
};