J'ai en dessous de la corde -
var a = "1,2,3,4";
quand je fais -
var b = a.split(',');
Je reçois b
comme ["1", "2", "3", "4"]
puis-je faire quelque chose pour obtenir b
comme [1, 2, 3, 4]
?
Vous pouvez utiliser Array.map
pour convertir chaque élément en nombre.
var a = "1,2,3,4";
var b = a.split(',').map(function(item) {
return parseInt(item, 10);
});
Vérifiez la Docs
Ou plus élégamment comme indiqué par l'utilisateur: thg435
var b = a.split(',').map(Number);
Où Number()
ferait le reste: vérifiez ici
Remarque: Pour les anciens navigateurs qui ne prennent pas en charge map
, vous pouvez ajouter vous-même une implémentation telle que
Array.prototype.map = Array.prototype.map || function(_x) {
for(var o=[], i=0; i<this.length; i++) {
o[i] = _x(this[i]);
}
return o;
};
Mappez-le sur des entiers:
a.split(',').map(function(i){
return parseInt(i, 10);
})
map
regarde chaque élément du tableau, le passe à la fonction fournie et renvoie un tableau avec les valeurs de retour de cette fonction. map
n'est pas disponible dans les anciens navigateurs, mais la plupart des bibliothèques comme jQuery ou underscore incluent une version multi-navigateurs.
Ou, si vous préférez les boucles:
var res = a.split(",");
for (var i=0; i<res.length; i++)
{
res[i] = parseInt(res[i], 10);
}
+string
va essayer de changer la chaîne en un nombre. Puis utilisez la fonction Array.map
pour changer chaque élément.
"1,2,3,4".split(',').map(function(el){ return +el;});
Une solution plus courte: mappez et passez les arguments à Number
:
var a = "1,2,3,4";
var b = a.split(',');
console.log(b);
var c = b.map(Number);
console.log(c);
En variante, vous pouvez utiliser les méthodes combiantion _.map
et _.ary
de la bibliothèque lodash . Toute la transformation sera plus compacte. Voici un exemple tiré de documentation officielle :
_.map(['6', '8', '10'], _.ary(parseInt, 1));
// → [6, 8, 10]
Version de Matt Zeunert avec utilisation de la fonction arraw (ES6)
const nums = a.split(',').map(x => parseInt(x, 10));
Il n'est pas nécessaire d'utiliser lambdas et/ou d'attribuer le paramètre radix
à parseInt
, utilisez plutôt parseFloat
ou Number
à la place.
Les raisons:
Ça marche:
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
C'est plus court.
C’est un peu plus rapide et tire parti du cache, lorsque parseInt
- approche - n’a pas:
// 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'! >_<
Remarque: dans Firefox parseInt
fonctionne environ 4 fois plus vite, mais reste plus lent que d’autres. Au total: +e
<Number
<parseFloat
<parseInt
Le soulignement js façon -
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);
Comme toutes les réponses permettent d'inclure NaN
, j'ai pensé ajouter que si vous voulez convertir rapidement un tableau de valeurs mélangées en nombres, vous pouvez le faire.
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.
Array.from () pour plus de détails, allez à MDN
var a = "1,2,3,4";
var b = Array.from(a.split(','),Number);
b
est un tableau de nombres