Skip to content

Commit ae19bbc

Browse files
committed
Merge remote-tracking branch 'origin/master'
2 parents aac527d + d55c3ff commit ae19bbc

File tree

2 files changed

+19
-1
lines changed

2 files changed

+19
-1
lines changed

src/test/mergeWith.test.ts

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { mergeWith } from '../utils/set';
2+
3+
describe('mergeWith array merge', () => {
4+
it('should keep existing array length when merging sparse updates', () => {
5+
const allValues = { list: ['A', 'B', 'C', 'D'] };
6+
const changedValues = { list: new Array(2) };
7+
changedValues.list[1] = 'BB'; // 仅更新第 2 项,长度为 2
8+
9+
const merged = mergeWith([allValues, changedValues], {
10+
prepareArray: current => [...(current || [])],
11+
});
12+
13+
expect(merged.list).toEqual(['A', 'BB', 'C', 'D']);
14+
expect(merged.list).toHaveLength(4);
15+
});
16+
});

src/utils/set.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,9 @@ export function mergeWith<T extends object>(
111111
}
112112

113113
keys(value).forEach(key => {
114-
internalMerge([...path, key], loopSet);
114+
if (Object.getOwnPropertyDescriptor(value, key).enumerable) {
115+
internalMerge([...path, key], loopSet);
116+
}
115117
});
116118
}
117119
} else {

0 commit comments

Comments
 (0)