@@ -257,38 +257,39 @@ export function replaceEqualDeep(a: any, b: any): any {
257
257
}
258
258
259
259
const array = isPlainArray ( a ) && isPlainArray ( b )
260
-
261
- if ( array || ( isPlainObject ( a ) && isPlainObject ( b ) ) ) {
262
- const aItems = array ? a : Object . keys ( a )
263
- const aSize = aItems . length
264
- const bItems = array ? b : Object . keys ( b )
265
- const bSize = bItems . length
266
- const copy : any = array ? [ ] : { }
267
- const aItemsSet = new Set ( aItems )
268
-
269
- let equalItems = 0
270
-
271
- for ( let i = 0 ; i < bSize ; i ++ ) {
272
- const key = array ? i : bItems [ i ]
273
- if (
274
- ( ( ! array && aItemsSet . has ( key ) ) || array ) &&
275
- a [ key ] === undefined &&
276
- b [ key ] === undefined
277
- ) {
278
- copy [ key ] = undefined
260
+ const object = ! array && isPlainObject ( a ) && isPlainObject ( b )
261
+
262
+ if ( ! array && ! object ) return b
263
+
264
+ const aItems = array ? a : Object . keys ( a )
265
+ const aSize = aItems . length
266
+ const bItems = array ? b : Object . keys ( b )
267
+ const bSize = bItems . length
268
+ const copy : any = array ? new Array ( bSize ) : { }
269
+ // const aItemsSet = new Set(aItems)
270
+
271
+ let equalItems = 0
272
+
273
+ for ( let i = 0 ; i < bSize ; i ++ ) {
274
+ const key = array ? i : bItems [ i ]
275
+ const aItem = a [ key ]
276
+ if (
277
+ ( array || a . hasOwnProperty ( key ) ) &&
278
+ aItem === undefined &&
279
+ b [ key ] === undefined
280
+ ) {
281
+ copy [ key ] = undefined
282
+ equalItems ++
283
+ } else {
284
+ const value = replaceEqualDeep ( aItem , b [ key ] )
285
+ copy [ key ] = value
286
+ if ( value === aItem && aItem !== undefined ) {
279
287
equalItems ++
280
- } else {
281
- copy [ key ] = replaceEqualDeep ( a [ key ] , b [ key ] )
282
- if ( copy [ key ] === a [ key ] && a [ key ] !== undefined ) {
283
- equalItems ++
284
- }
285
288
}
286
289
}
287
-
288
- return aSize === bSize && equalItems === aSize ? a : copy
289
290
}
290
291
291
- return b
292
+ return aSize === bSize && equalItems === aSize ? a : copy
292
293
}
293
294
294
295
/**
0 commit comments