Convert string parameter to an array of one element












8














I wrote a function which has to support two types of a paramter names for a list of values. Internally it deals with the parameter as an array.



A single name is given as string and multiples names are given as an array of strings.



// simplified example
let doSome = names => names.map(name => name.toUpperCase())

names(['Bart', 'Lisa'])
// [ 'BART', 'LISA' ]
names('Homer')
// TypeError: names.map is not a function


I found a solution using Array.of() in combination with flatten() which needs some babel configuration.



doSome = names => Array.of(names).flatten().map(name => name.toUpperCase());


Is there an idiomatic way in JavaScript to get an array without a type check?










share|improve this question
























  • I think you may use split() to convert a string in to array of one element
    – Manikanta Chinta
    27 mins ago
















8














I wrote a function which has to support two types of a paramter names for a list of values. Internally it deals with the parameter as an array.



A single name is given as string and multiples names are given as an array of strings.



// simplified example
let doSome = names => names.map(name => name.toUpperCase())

names(['Bart', 'Lisa'])
// [ 'BART', 'LISA' ]
names('Homer')
// TypeError: names.map is not a function


I found a solution using Array.of() in combination with flatten() which needs some babel configuration.



doSome = names => Array.of(names).flatten().map(name => name.toUpperCase());


Is there an idiomatic way in JavaScript to get an array without a type check?










share|improve this question
























  • I think you may use split() to convert a string in to array of one element
    – Manikanta Chinta
    27 mins ago














8












8








8


0





I wrote a function which has to support two types of a paramter names for a list of values. Internally it deals with the parameter as an array.



A single name is given as string and multiples names are given as an array of strings.



// simplified example
let doSome = names => names.map(name => name.toUpperCase())

names(['Bart', 'Lisa'])
// [ 'BART', 'LISA' ]
names('Homer')
// TypeError: names.map is not a function


I found a solution using Array.of() in combination with flatten() which needs some babel configuration.



doSome = names => Array.of(names).flatten().map(name => name.toUpperCase());


Is there an idiomatic way in JavaScript to get an array without a type check?










share|improve this question















I wrote a function which has to support two types of a paramter names for a list of values. Internally it deals with the parameter as an array.



A single name is given as string and multiples names are given as an array of strings.



// simplified example
let doSome = names => names.map(name => name.toUpperCase())

names(['Bart', 'Lisa'])
// [ 'BART', 'LISA' ]
names('Homer')
// TypeError: names.map is not a function


I found a solution using Array.of() in combination with flatten() which needs some babel configuration.



doSome = names => Array.of(names).flatten().map(name => name.toUpperCase());


Is there an idiomatic way in JavaScript to get an array without a type check?







javascript arrays string






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 31 mins ago

























asked 52 mins ago









sschmeck

3,0741936




3,0741936












  • I think you may use split() to convert a string in to array of one element
    – Manikanta Chinta
    27 mins ago


















  • I think you may use split() to convert a string in to array of one element
    – Manikanta Chinta
    27 mins ago
















I think you may use split() to convert a string in to array of one element
– Manikanta Chinta
27 mins ago




I think you may use split() to convert a string in to array of one element
– Manikanta Chinta
27 mins ago












2 Answers
2






active

oldest

votes


















13














You can use Array.concat(), since concat accepts both arrays and non arrays:






const names = (v) => .concat(v).map(name => name.toUpperCase())

console.log(names(['Bart', 'Lisa'])) // [ 'BART', 'LISA' ]
console.log(names('Homer')) // ['HOMER']








share|improve this answer





























    0














    Maybe an maybe upcomming method of Array#flat would help in this case (works actually only in Chrome and FF).






    const names = unknown => [unknown].flat().map(name => name.toUpperCase())

    console.log(names(['Bart', 'Lisa']));
    console.log(names('Homer'));








    share|improve this answer





















      Your Answer






      StackExchange.ifUsing("editor", function () {
      StackExchange.using("externalEditor", function () {
      StackExchange.using("snippets", function () {
      StackExchange.snippets.init();
      });
      });
      }, "code-snippets");

      StackExchange.ready(function() {
      var channelOptions = {
      tags: "".split(" "),
      id: "1"
      };
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function() {
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled) {
      StackExchange.using("snippets", function() {
      createEditor();
      });
      }
      else {
      createEditor();
      }
      });

      function createEditor() {
      StackExchange.prepareEditor({
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader: {
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      },
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      });


      }
      });














      draft saved

      draft discarded


















      StackExchange.ready(
      function () {
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54039152%2fconvert-string-parameter-to-an-array-of-one-element%23new-answer', 'question_page');
      }
      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      13














      You can use Array.concat(), since concat accepts both arrays and non arrays:






      const names = (v) => .concat(v).map(name => name.toUpperCase())

      console.log(names(['Bart', 'Lisa'])) // [ 'BART', 'LISA' ]
      console.log(names('Homer')) // ['HOMER']








      share|improve this answer


























        13














        You can use Array.concat(), since concat accepts both arrays and non arrays:






        const names = (v) => .concat(v).map(name => name.toUpperCase())

        console.log(names(['Bart', 'Lisa'])) // [ 'BART', 'LISA' ]
        console.log(names('Homer')) // ['HOMER']








        share|improve this answer
























          13












          13








          13






          You can use Array.concat(), since concat accepts both arrays and non arrays:






          const names = (v) => .concat(v).map(name => name.toUpperCase())

          console.log(names(['Bart', 'Lisa'])) // [ 'BART', 'LISA' ]
          console.log(names('Homer')) // ['HOMER']








          share|improve this answer












          You can use Array.concat(), since concat accepts both arrays and non arrays:






          const names = (v) => .concat(v).map(name => name.toUpperCase())

          console.log(names(['Bart', 'Lisa'])) // [ 'BART', 'LISA' ]
          console.log(names('Homer')) // ['HOMER']








          const names = (v) => .concat(v).map(name => name.toUpperCase())

          console.log(names(['Bart', 'Lisa'])) // [ 'BART', 'LISA' ]
          console.log(names('Homer')) // ['HOMER']





          const names = (v) => .concat(v).map(name => name.toUpperCase())

          console.log(names(['Bart', 'Lisa'])) // [ 'BART', 'LISA' ]
          console.log(names('Homer')) // ['HOMER']






          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered 50 mins ago









          Ori Drori

          74k127792




          74k127792

























              0














              Maybe an maybe upcomming method of Array#flat would help in this case (works actually only in Chrome and FF).






              const names = unknown => [unknown].flat().map(name => name.toUpperCase())

              console.log(names(['Bart', 'Lisa']));
              console.log(names('Homer'));








              share|improve this answer


























                0














                Maybe an maybe upcomming method of Array#flat would help in this case (works actually only in Chrome and FF).






                const names = unknown => [unknown].flat().map(name => name.toUpperCase())

                console.log(names(['Bart', 'Lisa']));
                console.log(names('Homer'));








                share|improve this answer
























                  0












                  0








                  0






                  Maybe an maybe upcomming method of Array#flat would help in this case (works actually only in Chrome and FF).






                  const names = unknown => [unknown].flat().map(name => name.toUpperCase())

                  console.log(names(['Bart', 'Lisa']));
                  console.log(names('Homer'));








                  share|improve this answer












                  Maybe an maybe upcomming method of Array#flat would help in this case (works actually only in Chrome and FF).






                  const names = unknown => [unknown].flat().map(name => name.toUpperCase())

                  console.log(names(['Bart', 'Lisa']));
                  console.log(names('Homer'));








                  const names = unknown => [unknown].flat().map(name => name.toUpperCase())

                  console.log(names(['Bart', 'Lisa']));
                  console.log(names('Homer'));





                  const names = unknown => [unknown].flat().map(name => name.toUpperCase())

                  console.log(names(['Bart', 'Lisa']));
                  console.log(names('Homer'));






                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered 35 mins ago









                  Nina Scholz

                  176k1390155




                  176k1390155






























                      draft saved

                      draft discarded




















































                      Thanks for contributing an answer to Stack Overflow!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.





                      Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                      Please pay close attention to the following guidance:


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid



                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.


                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function () {
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54039152%2fconvert-string-parameter-to-an-array-of-one-element%23new-answer', 'question_page');
                      }
                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown







                      Popular posts from this blog

                      Eastern Orthodox Church

                      Zagreb

                      Understanding the information contained in the Deep Space Network XML data?