Bird
Raised Fist0
Node.jsframework~20 mins

URLSearchParams for query strings in Node.js - Practice Problems & Coding Challenges

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Challenge - 5 Problems
🎖️
URLSearchParams Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output of this code using URLSearchParams?
Consider the following Node.js code snippet that uses URLSearchParams. What will be printed to the console?
Node.js
const params = new URLSearchParams('name=alice&age=30&city=NY');
console.log(params.get('age'));
A"NY"
B"alice"
Cnull
D"30"
Attempts:
2 left
💡 Hint
Remember that get returns the value of the given key from the query string.
📝 Syntax
intermediate
2:00remaining
Which option correctly creates a URLSearchParams object from an object?
You want to create a URLSearchParams instance from this object: { foo: 'bar', count: 5 }. Which code snippet works without error?
Anew URLSearchParams([['foo', 'bar'], ['count', '5']])
Bnew URLSearchParams({ foo: 'bar', count: 5 })
Cnew URLSearchParams('foo=bar&count=5')
Dnew URLSearchParams({ foo: 'bar', count: '5' })
Attempts:
2 left
💡 Hint
URLSearchParams accepts a string or an iterable of key-value pairs, not a plain object.
🔧 Debug
advanced
2:00remaining
Why does this code throw a TypeError?
Examine the code below. Why does it throw a TypeError?
Node.js
const params = new URLSearchParams({ key: 'value' });
console.log(params.toString());
AURLSearchParams constructor does not accept plain objects, only strings or iterable key-value pairs
BThe toString method is not defined on URLSearchParams instances
CThe key 'key' is reserved and cannot be used in URLSearchParams
DThe value 'value' must be a number, not a string
Attempts:
2 left
💡 Hint
Check the allowed argument types for URLSearchParams constructor.
state_output
advanced
2:00remaining
What is the final query string after these operations?
Given the following code, what will params.toString() output?
Node.js
const params = new URLSearchParams('a=1&b=2&c=3');
params.set('b', '20');
params.append('d', '4');
params.delete('a');
A"a=1&b=20&c=3"
B"b=20&c=3&d=4"
C"b=2&c=3&d=4"
D"a=1&b=20&c=3&d=4"
Attempts:
2 left
💡 Hint
Remember that set replaces the value, append adds a new value, and delete removes the key.
🧠 Conceptual
expert
3:00remaining
Which option correctly explains how URLSearchParams handles multiple values for the same key?
If a query string contains multiple values for the same key, how does URLSearchParams behave when using get and getAll methods?
A<code>get</code> returns the last value; <code>getAll</code> returns only the first value
B<code>get</code> returns all values as a comma-separated string; <code>getAll</code> returns the last value
C<code>get</code> returns the first value; <code>getAll</code> returns all values as an array
D<code>get</code> throws an error if multiple values exist; <code>getAll</code> returns all values
Attempts:
2 left
💡 Hint
Think about how to retrieve one or all values for a repeated key.

Practice

(1/5)
1. What does the URLSearchParams class in Node.js primarily help you do?
easy
A. Easily read and modify URL query strings
B. Create HTTP servers
C. Parse JSON data
D. Manage file system paths

Solution

  1. Step 1: Understand the purpose of URLSearchParams

    URLSearchParams is designed to work with the query part of URLs, making it easy to read and change parameters.
  2. Step 2: Compare with other options

    Creating servers, parsing JSON, or managing file paths are unrelated to URLSearchParams.
  3. Final Answer:

    Easily read and modify URL query strings -> Option A
  4. Quick Check:

    URLSearchParams = query string helper [OK]
Hint: URLSearchParams = query string helper [OK]
Common Mistakes:
  • Confusing URLSearchParams with server or file system modules
  • Thinking it parses JSON data
  • Assuming it manages entire URLs, not just query strings
2. Which of the following is the correct way to create a URLSearchParams object from a query string in Node.js?
easy
A. const params = new URLSearchParams({name: 'John', age: 30});
B. const params = URLSearchParams('?name=John&age=30');
C. const params = URLSearchParams({name: 'John', age: 30});
D. const params = new URLSearchParams('?name=John&age=30');

Solution

  1. Step 1: Check the correct syntax for creating URLSearchParams

    The constructor requires the new keyword and accepts a query string like '?name=John&age=30'.
  2. Step 2: Identify incorrect options

    Options without new or passing an object directly without conversion are invalid.
  3. Final Answer:

    const params = new URLSearchParams('?name=John&age=30'); -> Option D
  4. Quick Check:

    Use new with query string [OK]
Hint: Always use 'new' with URLSearchParams and a query string [OK]
Common Mistakes:
  • Omitting the 'new' keyword
  • Passing an object directly without converting to string
  • Using URLSearchParams as a function, not a constructor
3. What will the following code output?
const params = new URLSearchParams('color=blue&size=medium');
params.set('size', 'large');
console.log(params.toString());
medium
A. color=blue&size=medium
B. color=blue
C. color=blue&size=large
D. size=large&color=blue

Solution

  1. Step 1: Understand params.set()

    The set method updates the value of the 'size' parameter from 'medium' to 'large'.
  2. Step 2: Check the output of toString()

    The toString() method returns the query string with updated parameters in the order they were added.
  3. Final Answer:

    color=blue&size=large -> Option C
  4. Quick Check:

    set() updates value, toString() shows updated string [OK]
Hint: set() changes value; toString() shows updated query [OK]
Common Mistakes:
  • Assuming set() adds a new parameter without replacing
  • Thinking order of parameters changes
  • Forgetting to call toString() to see the string
4. Identify the error in this code snippet:
const params = new URLSearchParams('page=1&limit=10');
params.append('page', 2);
console.log(params.get('page'));
medium
A. get() returns only the first 'page' value, ignoring the appended one
B. append() replaces the existing 'page' parameter instead of adding
C. URLSearchParams constructor cannot accept strings
D. append() requires both parameters to be strings

Solution

  1. Step 1: Understand append() behavior

    append() adds another 'page' parameter, so now there are two 'page' keys.
  2. Step 2: Understand get() behavior

    get() returns the first value for 'page', which is '1', ignoring the appended '2'.
  3. Final Answer:

    get() returns only the first 'page' value, ignoring the appended one -> Option A
  4. Quick Check:

    get() returns first value when duplicates exist [OK]
Hint: get() returns first value; use getAll() for all [OK]
Common Mistakes:
  • Thinking append() replaces existing keys
  • Expecting get() to return all values
  • Assuming constructor rejects strings
5. You want to build a URL query string from an object { search: 'books', page: 2, filter: '' } but want to exclude empty values. Which code correctly creates the query string using URLSearchParams?
hard
A. const params = new URLSearchParams({ search: 'books', page: '2', filter: '' }); console.log(params.toString());
B. const params = new URLSearchParams(); for (const [key, value] of Object.entries({ search: 'books', page: 2, filter: '' })) { if (value) params.append(key, value.toString()); } console.log(params.toString());
C. const params = new URLSearchParams(); Object.entries({ search: 'books', page: 2, filter: '' }).forEach(([k,v]) => params.set(k,v)); console.log(params.toString());
D. const params = new URLSearchParams(); for (const key in { search: 'books', page: 2, filter: '' }) { params.append(key, ''); } console.log(params.toString());

Solution

  1. Step 1: Understand the goal to exclude empty values

    We want to skip keys with empty strings, so we check if the value is truthy before adding.
  2. Step 2: Analyze each option

    const params = new URLSearchParams({ search: 'books', page: '2', filter: '' }); console.log(params.toString()); includes empty 'filter' value. const params = new URLSearchParams(); for (const [key, value] of Object.entries({ search: 'books', page: 2, filter: '' })) { if (value) params.append(key, value.toString()); } console.log(params.toString()); adds only truthy values. const params = new URLSearchParams(); Object.entries({ search: 'books', page: 2, filter: '' }).forEach(([k,v]) => params.set(k,v)); console.log(params.toString()); adds all including empty. const params = new URLSearchParams(); for (const key in { search: 'books', page: 2, filter: '' }) { params.append(key, ''); } console.log(params.toString()); adds empty strings for all keys.
  3. Final Answer:

    Option B correctly filters out empty values before appending -> Option B
  4. Quick Check:

    Filter empty values before append() [OK]
Hint: Check value truthiness before adding to URLSearchParams [OK]
Common Mistakes:
  • Passing object directly without filtering empty values
  • Using set() without filtering, adding empty keys
  • Appending empty strings for all keys