How to convert a string of numbers to an array of numbers?

JavascriptArrays

Javascript Problem Overview


I have below string -

var a = "1,2,3,4";

when I do -

var b = a.split(',');

I get b as ["1", "2", "3", "4"]

can I do something to get b as [1, 2, 3, 4] ?

Javascript Solutions


Solution 1 - Javascript

You can use Array.map to convert each element into a number.

var a = "1,2,3,4";

var b = a.split(',').map(function(item) {
    return parseInt(item, 10);
});

Check the Docs


Or more elegantly as pointed out by User: thg435

var b = a.split(',').map(Number);

Where Number() would do the rest:check here


Note: For older browsers that don't support map, you can add an implementation yourself like:

Array.prototype.map = Array.prototype.map || function(_x) {
    for(var o=[], i=0; i<this.length; i++) { 
        o[i] = _x(this[i]); 
    }
    return o;
};

Solution 2 - Javascript

My 2 cents for golfers:

b="1,2,3,4".split`,`.map(x=>+x)

backquote is string litteral so we can omit the parenthesis (because of the nature of split function) but it is equivalent to split(','). The string is now an array, we just have to map each value with a function returning the integer of the string so x=>+x (which is even shorter than the Number function (5 chars instead of 6)) is equivalent to :

function(x){return parseInt(x,10)}// version from techfoobar
(x)=>{return parseInt(x)}         // lambda are shorter and parseInt default is 10
(x)=>{return +x}                  // diff. with parseInt in SO but + is better in this case
x=>+x                             // no multiple args, just 1 function call

I hope it is a bit more clear.

Solution 3 - Javascript

> This is very simple.Such as:

["1", "2", "3", "4"].map(i=>Number(i))

you can run the demo.

let result = ["1", "2", "3", "4"].map(i=>Number(i));
console.log(result);

Solution 4 - Javascript

Array.from() for details go to MDN

let a = "1,2,3,4";
let b = Array.from(a.split(','),Number);

or

let c = ["1", "2", "3", "4"].map(Number);

b and c is an array of numbers.

demonstration:

let a = "1,2,3,4"; let b = Array.from(a.split(','),Number);

let c = ["1", "2", "3", "4"].map(Number);

console.log(`b: ${b}, c: ${c}`);

Solution 5 - Javascript

Map it to integers:

a.split(',').map(function(i){
    return parseInt(i, 10);
})

map looks at every array item, passes it to the function provided and returns an array with the return values of that function. map isn't available in old browsers, but most libraries like jQuery or underscore include a cross-browser version.

Or, if you prefer loops:

var res = a.split(",");
for (var i=0; i<res.length; i++)
{
    res[i] = parseInt(res[i], 10);
}

Solution 6 - Javascript

+string will try to change the string to a number. Then use Array.map function to change every element.

"1,2,3,4".split(',').map(function(el){ return +el;});

Solution 7 - Javascript

A more shorter solution: map and pass the arguments to Number:

var a = "1,2,3,4";
var b = a.split(',');
console.log(b);
var c = b.map(Number);
console.log(c);

Solution 8 - Javascript

One liner

Array.from(a.split(','), Number)

Solution 9 - Javascript

There's no need to use lambdas and/or give radix parameter to parseInt, just use parseFloat or Number instead.

Reasons:

  1. It's working:

     var src = "1,2,5,4,3";
     var ids = src.split(',').map(parseFloat); // [1, 2, 5, 4, 3]
    
     var obj = {1: ..., 3: ..., 4: ..., 7: ...};
     var keys= Object.keys(obj); // ["1", "3", "4", "7"]
     var ids = keys.map(parseFloat); // [1, 3, 4, 7]
    
     var arr = ["1", 5, "7", 11];
     var ints= arr.map(parseFloat); // [1, 5, 7, 11]
     ints[1] === "5" // false
     ints[1] === 5   // true
     ints[2] === "7" // false
     ints[2] === 7   // true
    
  2. It's shorter.

  3. It's a tiny bit quickier and takes advantage of cache, when parseInt-approach - doesn't:

       // execution time measure function
       // keep it simple, yeah?
     > var f = (function (arr, c, n, m) {
           var i,t,m,s=n();
           for(i=0;i++<c;)t=arr.map(m);
           return n()-s
       }).bind(null, "2,4,6,8,0,9,7,5,3,1".split(','), 1000000, Date.now);
       
     > f(Number) // first launch, just warming-up cache
     > 3971 // nice =)
    
     > f(Number)
     > 3964 // still the same
    
     > f(function(e){return+e})
     > 5132 // yup, just little bit slower
    
     > f(function(e){return+e})
     > 5112 // second run... and ok.
    
     > f(parseFloat)
     > 3727 // little bit quicker than .map(Number)
    
     > f(parseFloat)
     > 3737 // all ok
    
     > f(function(e){return parseInt(e,10)})
     > 21852 // awww, how adorable...
    
     > f(function(e){return parseInt(e)})
     > 22928 // maybe, without '10'?.. nope.
    
     > f(function(e){return parseInt(e)})
     > 22769 // second run... and nothing changes.
    
     > f(Number)
     > 3873 // and again
     > f(parseFloat)
     > 3583 // and again
     > f(function(e){return+e})
     > 4967 // and again
    
     > f(function(e){return parseInt(e,10)})
     > 21649 // dammit 'parseInt'! >_<
    

Notice: In Firefox parseInt works about 4 times faster, but still slower than others. In total: +e < Number < parseFloat < parseInt

Solution 10 - Javascript

As a variant you can use combiantion _.map and _.ary methods from the lodash library. Whole transformation will be a more compact. Here is example from the official documentation:

_.map(['6', '8', '10'], _.ary(parseInt, 1));
// → [6, 8, 10]

Solution 11 - Javascript

The underscore js way -

var a = "1,2,3,4",
  b = a.split(',');

//remove falsy/empty values from array after split
b = _.compact(b);
//then Convert array of string values into Integer
b = _.map(b, Number);

console.log('Log String to Int conversion @b =', b);

Solution 12 - Javascript

Matt Zeunert's version with use arraw function (ES6)

const nums = a.split(',').map(x => parseInt(x, 10));

Solution 13 - Javascript

This works amazing if you need to convert an array of strings to numbers.

const numbers = arr => arr.map(Number);
numbers(['1', '2', '3','4']);     // [1, 2, 3, 4]

Solution 14 - Javascript

Since all the answers allow NaN to be included, I thought I'd add that if you want to quickly cast an array of mixed values to numbers you can do.

var a = "1,2,3,4,foo,bar";

var b = a.split(',');

var result = b.map(_=>_|0) // Floors the number (32-bit signed integer) so this wont work if you need all 64 bits.

// or b.map(_=>_||0) if you know your array is just numbers but may include NaN.

Solution 15 - Javascript

You can use JSON.parse, adding brakets to format Array

const a = "1,2,3,4";
const myArray = JSON.parse(`[${a}]`)
console.log(myArray)
console.info('pos 2 = ',  myArray[2])

Solution 16 - Javascript

You can transform array of strings to array of numbers in one line:

const arrayOfNumbers = arrayOfStrings.map(e => +e);

Solution 17 - Javascript

let ar = [ '682',    '874',    '906',    '11168',  '73714',
  '74377',  '74034',  '138860', '138891', '139161', '139562',
  '139733', '139560', '74049',  '139759', '139934', '140104',
  '141335', '141356', '141334', '141337', '141360', '141358',
  '141365', '141419', '143333', '151477', '147342', '141355',
  '167847', '192141', '196760', '191687', '197351', '197055',
  '198852', '198731', '198816', '199034', '200053', '199226',
  '217818', '200055', '222039', '230533', '230530', '231127',
  '222042', '231100', '236171', '236913', '236980', '237015',
  '237016', '237052', '237551', '237560', '237590', '237637',
  '237733', '237731', '237655', '238890', '238910', '238837',
  '238926', '238972', '238925', '239755', '239696', '239898',
  '240037', '239909', '240036', '240082', '240097', '240526',
  '240770', '678151', '678950', '678985'];
let arry=[]
ar.map(arr=>{
arry.push(parseInt(arr))
});

console.log(arry);

Solution 18 - Javascript

Use Array.from for this, Try this:

let b = ["1", "2", "3", "4"];
b = Array.from(b,Number);
console.log(b);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAshwinView Question on Stackoverflow
Solution 1 - JavascripttechfoobarView Answer on Stackoverflow
Solution 2 - JavascriptTrapIIView Answer on Stackoverflow
Solution 3 - JavascriptQ10VikingView Answer on Stackoverflow
Solution 4 - JavascriptAymenView Answer on Stackoverflow
Solution 5 - JavascriptMatt ZeunertView Answer on Stackoverflow
Solution 6 - JavascriptxdazzView Answer on Stackoverflow
Solution 7 - JavascriptnicaelView Answer on Stackoverflow
Solution 8 - JavascriptPraveen KishorView Answer on Stackoverflow
Solution 9 - JavascriptankhzetView Answer on Stackoverflow
Solution 10 - JavascriptAlexander MyshovView Answer on Stackoverflow
Solution 11 - JavascriptMohan DereView Answer on Stackoverflow
Solution 12 - JavascriptFreeClimbView Answer on Stackoverflow
Solution 13 - JavascriptArvis IljinsView Answer on Stackoverflow
Solution 14 - Javascriptuser7986267View Answer on Stackoverflow
Solution 15 - JavascriptJackNavaRowView Answer on Stackoverflow
Solution 16 - JavascriptGeorgi PopovView Answer on Stackoverflow
Solution 17 - JavascriptHammad AliView Answer on Stackoverflow
Solution 18 - JavascriptSahil ThummarView Answer on Stackoverflow