56

In JS if you would like to split user entry into an array what is the best way of going about it?

For example:

entry = prompt("Enter your name")

for (i=0; i<entry.length; i++)
{
entryArray[i] = entry.charAt([i]);
}

// entryArray=['j', 'e', 'a', 'n', 's', 'y'] after loop

Perhaps I'm going about this the wrong way - would appreciate any help!

Captain Sparrow
  • 1,114
  • 17
  • 26
methuselah
  • 12,766
  • 47
  • 165
  • 315

10 Answers10

92

Use the .split() method. When specifying an empty string as the separator, the split() method will return an array with one element per character.

entry = prompt("Enter your name")
entryArray = entry.split("");
James Hill
  • 60,353
  • 20
  • 145
  • 161
17

ES6 :

const array = [...entry]; // entry="i am" => array=["i"," ","a","m"]
Community
  • 1
  • 1
Abdennour TOUMI
  • 87,526
  • 38
  • 249
  • 254
12

use var array = entry.split("");

Jordan Wallwork
  • 3,116
  • 2
  • 24
  • 49
10

Do you care for non-English names? If so, all of the presented solutions (.split(''), [...str], Array.from(str), etc.) may give bad results, depending on language:

"प्रणव मुखर्जी".split("") // the current president of India, Pranab Mukherjee
// returns ["प", "्", "र", "ण", "व", " ", "म", "ु", "ख", "र", "्", "ज", "ी"]
// but should return ["प्", "र", "ण", "व", " ", "मु", "ख", "र्", "जी"]

Consider using the grapheme-splitter library for a clean standards-based split: https://github.com/orling/grapheme-splitter

Orlin Georgiev
  • 1,391
  • 16
  • 18
5
var foo = 'somestring'; 

// bad example https://stackoverflow.com/questions/6484670/how-do-i-split-a-string-into-an-array-of-characters/38901550#38901550

var arr = foo.split(''); 
console.log(arr); // ["s", "o", "m", "e", "s", "t", "r", "i", "n", "g"]

// good example
var arr = Array.from(foo);
console.log(arr); // ["s", "o", "m", "e", "s", "t", "r", "i", "n", "g"]

// best
var arr = [...foo]
console.log(arr); // ["s", "o", "m", "e", "s", "t", "r", "i", "n", "g"]
аlex
  • 5,426
  • 1
  • 29
  • 38
4

Use split method:

entry = prompt("Enter your name");
entryArray = entry.split("");

Refer String.prototype.split() for more info.

user229044
  • 232,980
  • 40
  • 330
  • 338
Lukman
  • 18,462
  • 6
  • 56
  • 66
3

...and also for those who like literature in CS.

array = Array.from(entry);
Redu
  • 25,060
  • 6
  • 56
  • 76
3

You can try this:

var entryArray = Array.prototype.slice.call(entry)

Mic
  • 24,812
  • 9
  • 57
  • 70
  • 2
    See [http://jsperf.com/string-to-array-of-characters](http://jsperf.com/string-to-array-of-characters). – XP1 Feb 11 '12 at 22:06
2

ES6 is quite powerful in iterating through objects (strings, Array, Map, Set). Let's use a Spread Operator to solve this.

entry = prompt("Enter your name");
var count = [...entry];
console.log(count);
JideLambo
  • 91
  • 3
1

You can try this way:

let entry = prompt("Enter your name") 
let entryArray = entry.split('')
console.log(entryArray)

here is fiddle https://jsfiddle.net/swapanil/Lp1arvqc/17/