diff --git a/packages/react-native/src/private/webapis/structuredClone/__tests__/structuredClone-itest.js b/packages/react-native/src/private/webapis/structuredClone/__tests__/structuredClone-itest.js index 402e055048da..e8e7156c953d 100644 --- a/packages/react-native/src/private/webapis/structuredClone/__tests__/structuredClone-itest.js +++ b/packages/react-native/src/private/webapis/structuredClone/__tests__/structuredClone-itest.js @@ -142,6 +142,21 @@ describe('structuredClone', () => { expect(clone).toEqual(value); }); + it('preserves holes in sparse arrays', () => { + const value = new Array(3); + value[1] = 'foo'; + + const clone = structuredClone(value); + + expect({ + length: clone.length, + keys: Object.keys(clone), + }).toEqual({ + length: 3, + keys: ['1'], + }); + }); + it('clones maps', () => { const value = new Map([ ['key1', 'value1'], diff --git a/packages/react-native/src/private/webapis/structuredClone/structuredClone.js b/packages/react-native/src/private/webapis/structuredClone/structuredClone.js index 89a7f90725be..4f37e26be9e4 100644 --- a/packages/react-native/src/private/webapis/structuredClone/structuredClone.js +++ b/packages/react-native/src/private/webapis/structuredClone/structuredClone.js @@ -67,7 +67,7 @@ function structuredCloneInternal(value: T): T { // Handles arrays. if (Array.isArray(value)) { - const result = []; + const result = new Array(value.length); memory.set(value, result); for (const key of Object.keys(value)) {