Antworten:
Sie können .split()ein Array von Zeichenfolgen abrufen und diese dann wie folgt in Zahlen konvertieren:
var myArray = "14 2".split(" ");
for(var i=0; i<myArray.length; i++) { myArray[i] = +myArray[i]; }
//use myArray, it's an array of numbers
Dies +myArray[i]ist nur eine schnelle Möglichkeit, die Zahlenkonvertierung durchzuführen. Wenn Sie sicher sind, dass es sich um Ganzzahlen handelt, können Sie einfach Folgendes tun:
for(var i=0; i<myArray.length; i++) { myArray[i] = parseInt(myArray[i], 10); }
myArray.forEach(function(x,y,z){ z[y]=x|0 })
.min.jsund .jswenn Sie Ihren Code verfügbar machen möchten ... denken Sie daran, dass die Minimierung nicht zur Verschleierung dient (oder nicht, da sie dafür ungefähr unbrauchbar ist), sondern zur Reduzierung des HTTP-Overheads - eine schnellere Seitenladung für Ihre Benutzer.
Eine schnelle für moderne Browser:
'14 2'.split(' ').map(Number);
// [14, 2]`
SO ... älterer Thread, ich weiß, aber ...
@RoccoMusolino hatte einen schönen Fang; Hier ist eine Alternative:
TL; DR:
const intArray = [...("5 6 7 69 foo 0".split(' ').filter(i => /\d/g.test(i)))]
FALSCH :"5 6 note this foo".split(" ").map(Number).filter(Boolean); // [5, 6]
Die hier aufgeführten eleganteren Lösungen weisen einen subtilen Fehler auf, insbesondere die ansonsten schönen Antworten von @amillara und @Marcus.
Das Problem tritt auf, wenn ein Element des Zeichenfolgenarrays nicht ganzzahlig ist, möglicherweise in einem Fall ohne Validierung einer Eingabe. Für ein erfundenes Beispiel ...
Das Problem:
var effedIntArray = "5 6 7 69 foo".split(' ').map(Number); // [5, 6, 7, 69, NaN]
Da Sie offensichtlich ein PURE int-Array möchten, ist dies ein Problem. Ehrlich gesagt habe ich das erst verstanden, als ich SO-Code in mein Skript kopiert habe ...: /
Der (etwas weniger Baller) Fix:
var intArray = "5 6 7 69 foo".split(" ").map(Number).filter(Boolean); // [5, 6, 7, 69]
Selbst wenn Sie jetzt einen Crap-Int-String haben, ist Ihre Ausgabe ein reines Integer-Array. Die anderen sind in den meisten Fällen wirklich sexy, aber ich wollte mein meistens wildes W'actually anbieten . Es ist immer noch ein Einzeiler, zu meiner Ehre ...
Hoffe es spart jemandem Zeit!
.filter(Boolean)durch.filter( (x) => !Number.isNaN(x))
var result = "14 2".split(" ").map(function(x){return parseInt(x)});
parseInt().
.mapJS in jedem Browser ohne zusätzliche Bibliotheken verwenden können und ähnliches.
Eine Alternative zur Antwort von Tushar Gupta wäre:
'14 2'.split(' ').map(x=>+x);
// [14, 2]`
Beim Code Golf speichern Sie 1 Zeichen. Hier ist das "+" der Operator "unary plus" und funktioniert wie parseInt.
Teilen Sie zuerst die Zeichenfolge auf Leerzeichen:
var result = '14 2'.split(' ');
Konvertieren Sie dann das Ergebnisarray von Zeichenfolgen in Ganzzahlen:
for (var i in result) {
result[i] = parseInt(result[i], 10);
}
parseInt(), da Sie sonst möglicherweise Oktale erhalten.
0oder 0xes in Ordnung sein sollte.
Der Punkt gegen den parseIntAnsatz:
Es ist nicht erforderlich, Lambdas zu verwenden und / oder radixParameter anzugeben. parseIntVerwenden Sie einfach parseFloatoder Numberstattdessen.
Gründe dafür:
Es funktioniert:
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 // trueEs ist kürzer.
Es ist ein kleines bisschen schneller und nutzt den Cache, wenn parseInt- Ansatz - nicht :
// 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'! >_<Hinweis: In Firefox parseIntfunktioniert es ungefähr viermal schneller, aber immer noch langsamer als andere. Insgesamt: +e< Number< parseFloat<parseInt
let idsArray = ids.split(',').map((x) => parseInt(x));
uns die Split-Funktion :
var splitresult = "14 2".split(" ");
for(var i=myArray.length; i--;) myArray[i] = myArray[i]|0;mit der bitweisen Konvertierung und kürzeren Schleifen