Respuestas:
Mis 2 centavos para golfistas:
b="1,2,3,4".split`,`.map(x=>+x)
la comilla posterior es literal de cadena, por lo que podemos omitir el paréntesis (debido a la naturaleza de la función dividida) pero es equivalente a split(',')
. La cadena ahora es una matriz, solo tenemos que asignar cada valor con una función que devuelva el entero de la cadena, por lo x=>+x
que (que es incluso más corta que la Number
función (5 caracteres en lugar de 6)) es equivalente a:
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
Espero que sea un poco más claro.
Puede usar Array.map
para convertir cada elemento en un número.
var a = "1,2,3,4";
var b = a.split(',').map(function(item) {
return parseInt(item, 10);
});
Revisa los documentos
O más elegantemente como lo señaló el Usuario: thg435
var b = a.split(',').map(Number);
Dónde Number()
haría el resto: verifique aquí
Nota: Para los navegadores más antiguos que no son compatibles map
, puede agregar una implementación usted mismo como:
Array.prototype.map = Array.prototype.map || function(_x) {
for(var o=[], i=0; i<this.length; i++) {
o[i] = _x(this[i]);
}
return o;
};
map(Number)
.
"1.1,2,3".split(",").map(Number)
es [1.1, 2, 3]
mientras que "1.1,2,3".split(",").map(item => parseInt(item, 10))
es[1, 2, 3]
Asignarlo a enteros:
a.split(',').map(function(i){
return parseInt(i, 10);
})
map
mira cada elemento de la matriz, lo pasa a la función proporcionada y devuelve una matriz con los valores de retorno de esa función. map
no está disponible en los navegadores antiguos, pero la mayoría de las bibliotecas como jQuery o subrayado incluyen una versión de navegador cruzado.
O, si prefieres bucles:
var res = a.split(",");
for (var i=0; i<res.length; i++)
{
res[i] = parseInt(res[i], 10);
}
Una solución más corta: mapear y pasar los argumentos a Number
:
var a = "1,2,3,4";
var b = a.split(',');
console.log(b);
var c = b.map(Number);
console.log(c);
Como variante, puede usar combiantion _.map
y _.ary
métodos de la biblioteca lodash . Toda la transformación será más compacta. Aquí hay un ejemplo de la documentación oficial :
_.map(['6', '8', '10'], _.ary(parseInt, 1));
// → [6, 8, 10]
No hay necesidad de usar lambdas y / o dar radix
parámetros a parseInt
, solo use parseFloat
o en su Number
lugar.
Razones:
Esta funcionando:
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
Es mas corto.
Es un poco más rápido y aprovecha la memoria caché, cuando el parseInt
enfoque no lo hace :
// 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'! >_<
Aviso: en Firefox parseInt
funciona aproximadamente 4 veces más rápido, pero aún más lento que otros. En total: +e
< Number
< parseFloat
<parseInt
El subrayado 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);
La versión de Matt Zeunert con la función use arraw (ES6)
const nums = a.split(',').map(x => parseInt(x, 10));
Un trazador de líneas
Array.from(a.split(','), Number)
Dado que todas las respuestas permiten NaN
ser incluidas, pensé agregar que si desea convertir rápidamente una matriz de valores mixtos en números, puede hacerlo.
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.