Giter Site home page Giter Site logo

Option to omit array indices about qs HOT 11 CLOSED

ljharb avatar ljharb commented on April 27, 2024
Option to omit array indices

from qs.

Comments (11)

ryanseys avatar ryanseys commented on April 27, 2024 1

You are da 💣 !

from qs.

Dakuan avatar Dakuan commented on April 27, 2024 1

true! I like arrayFormat

@nlf thoughts?

from qs.

nlf avatar nlf commented on April 27, 2024 1

I'm a +1 for arrayFormat

from qs.

Dakuan avatar Dakuan commented on April 27, 2024

Trouble with this is that if you are dealing with a PHP or Rails backend, it expects a[]=b&a[]=c which is rather what I was hoping for when I saw the omit indices option!

from qs.

wvengen avatar wvengen commented on April 27, 2024

The presence of an index is an issue here as well. What about omitting indices (but keeping the brackets) when the option indices is set to 'empty'?

from qs.

Dakuan avatar Dakuan commented on April 27, 2024

I know we dont like breaking changes, but I wonder if the ideal solution takes account of the fact that there are 3 array formats in use:

Rails, PHP, jQuery: a[]=b&a[]=c
Java, Go, c#: a=b&a=c
Express: a[0]=b&a[1]=b

something along the lines of:

qs.stringify({ a: ['b', 'c'] }, { format: 'brackets' }); //a[]=b&a[]=c
qs.stringify({ a: ['b', 'c'] }, { format: 'repeat' }); //a=b&a=c
qs.stringify({ a: ['b', 'c'] }, { format: 'indices' }); //a[0]=b&a[1]=c

from qs.

Dakuan avatar Dakuan commented on April 27, 2024

@wvengen see #65 too

from qs.

nlf avatar nlf commented on April 27, 2024

I think that's a good compromise

from qs.

wvengen avatar wvengen commented on April 27, 2024

Thanks, @Dakuan, for making it clear that the three array formats are all used.

I'm seeing four proposals:

  1. Don't remove brackets when indices is false - #65
  2. New option brackets in addition to indices - #65 (comment)
  3. New option format to replace brackets - #46 (comment)
  4. New value empty for indices - #46 (comment)

The first breaks backwards compatibility and only supports two types, so that doesn't have my preference. Two seems more verbose (two variables to set for one issue: how to serialize arrays). Three would include deprecation of the indices parameter in favour of format but is otherwise very clear. Four would be easiest, but it might be slightly confusing to accept both booleans and strings as values.

I'd like to propose a number five
5. Use string values for indices (like brackets, repeat, indices), while allowing true and false to remain backward-compatible (optionally deprecating them at the next major release).

from qs.

Dakuan avatar Dakuan commented on April 27, 2024

@wvengen I think thats a bit confusing, the word indices looses its meaning - {indices: 'brackets'} wouldn't really explain whats going on if you were coming at the code cold. How about:

var q = {
   a: ['b', 'c']
};

// don't break current default
qs.stringify(q) //a[0]=b&a[1]=c 

// deprecate indices option, but just warn for now to not break
qs.stringify(q, {indices: false} // //a=b&a=c DEPRECATION WARNING, please use {format: 'repeat'} 

// new format option, its semantic and can be expanded if the next hot framework
// takes a new approach
qs.stringify(q, { format: 'brackets' }); //a[]=b&a[]=c
qs.stringify(q, { format: 'repeat' }); //a=b&a=c
qs.stringify(q, { format: 'indices' }); //a[0]=b&a[1]=c

from qs.

wvengen avatar wvengen commented on April 27, 2024

@Dakuan Hmm I agree :) Then, reading your example, I'm wondering if 'arrayFormat' or 'arrays' would be clearer? These options are for the whole stringification, and this only is about arrays.

from qs.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.