tj / node-querystring

querystring parser for node and the browser - supporting nesting (used by Express, Connect, etc)
MIT License
457 stars 66 forks source link

stringify: Arrays | implicit and explicit indexing, empty fields #77

Open buschtoens opened 11 years ago

buschtoens commented 11 years ago
var arr = [0, 1, 2, 3, 4];
delete arr[3];

console.log(qs.stringify({ a: arr, b: undefined }));
// => a[0]=0&a[1]=1&a[2]=2&a[3]=undefined&a[4]=4&b=
buschtoens commented 11 years ago

Empty array fields should be preserved to keep the indexing, but should be empty, just like b.

a[0]=0&a[1]=1&a[2]=2&a[3]=&a[4]=4&b=

Maybe, we could also completely drop the empty field, when using explicit indexing.

a[0]=0&a[1]=1&a[2]=2&a[4]=4&b=

However, when the last element of the index is undefined/null this would change the array length. Although this is an edge case, it can break certain apps.

Tomorrow I'll do some tests, to see how different browsers handle a mix of implicit and explicit indexing, so we can optimize the output length.

tj commented 11 years ago

the reason we can't allow holes is because you could do foo[0]=bar&foo[999999999]=baz