diff --git a/packages/react-native/Libraries/Blob/URLSearchParams.js b/packages/react-native/Libraries/Blob/URLSearchParams.js index d325f7bb25a8..416c5509940a 100644 --- a/packages/react-native/Libraries/Blob/URLSearchParams.js +++ b/packages/react-native/Libraries/Blob/URLSearchParams.js @@ -77,7 +77,14 @@ export class URLSearchParams { } keys(): Iterator { - return this._searchParams.keys(); + function* generateKeys(params: Map): Iterator { + for (const [key, values] of params) { + for (let i = 0; i < values.length; i++) { + yield key; + } + } + } + return generateKeys(this._searchParams); } values(): Iterator { diff --git a/packages/react-native/Libraries/Blob/__tests__/URL-test.js b/packages/react-native/Libraries/Blob/__tests__/URL-test.js index 72467dc08ebb..8585f1789e2e 100644 --- a/packages/react-native/Libraries/Blob/__tests__/URL-test.js +++ b/packages/react-native/Libraries/Blob/__tests__/URL-test.js @@ -114,6 +114,10 @@ describe('URL', function () { expect(paramsFromArray.getAll('key1')).toEqual(['value1', 'value2']); expect(paramsFromArray.get('key2')).toBe('value3'); + // keys() should yield one entry per name-value pair, including duplicates + const keysArray = Array.from(paramsFromArray.keys()); + expect(keysArray).toEqual(['key1', 'key1', 'key2']); + // Manipulating existing search params in the URL const urlParams = url.searchParams; expect(urlParams.get('query')).toBe('testQuery');