Array-Elemente nach Typ auswerten
effel
- javascript
Hallo!
Ich arbeite mit Arrays, die sowohl Zahlen als auch Zeichenketten enthalten: z.B.
var arr1=[]
arr1=['4','5','mm','8'];
alle Array-Elemente sind zunächst Zeichenketten, dann möchte ich mit den Zahlen rechnen und die ZK('mm') auswerten, brauche also eine Funktion, die den Typ, der aus dem Array-Element entsteht, erkennt. Alle versuche mit "undefined" und "typeof" sind gescheitert. Mit der brachialen Funktion:
Z0=0
while (Z0 < ein1.length){
if((ein1[Z0]%2==0)||(ein1[Z0]%2==1)){
ANZ1[Z0]= 1*ein1[Z0] //Zahlen
}else{
MM1=ein1[Z0] //Srings
}
Z0=Z0+1;
}
Gibt es nicht eine elegantere Lösung?
Es grüßt Effel
var arr1=[] arr1=['4','5','mm','8'] alle Array-Elemente sind zunächst Zeichenketten, dann möchte ich mit den Zahlen rechnen und die ZK('mm') auswerten, brauche also eine Funktion, die den Typ, der aus dem Array-Element entsteht, erkennt.
setze einfach
var arr1 = [ 4, 5, 'mm', 8 ];
Dann liefert typeof, was Du erwartest. So wie Du es gemacht hast, sind es Strings.
Ein anderer Trick geht so:
v = 'E';
if ( Number.isNaN( v * 1 ) ) {
console.log("Hehe: Text");
} else {
console.log("Hehe: Zahl");
}
Literatur: JS: Number (MDN)
Und noch eine Bitte: Kannst Du auf Antwort mit Zitat verfassen
klicken und nachsehen, wie ich den Quelltext notiert habe? Oder in der Hilfe? Wir hatten das doch schon mal - oder irre ich mich?
Hi,
Ich arbeite mit Arrays, die sowohl Zahlen als auch Zeichenketten enthalten:
ich kenne die Programmiersprache "Zu diesem Forum", die Du als Schlagwort ausgewählt hast, nicht. 😉
Ohne Kenntnis der verwendeten Programmiersprache wird's schwierig …
cu,
Andreas a/k/a MudGuard
Hallo effel,
ich habe deinen Code mal als Code markiert, damit man wenigstens ein bisschen lesen kann. Und ich nehme an, dass Raketenwilli deinen Code korrekt als JavaScript erraten hat und habe den Beitrag entsprechend getaggt.
Wenn Du die Chance hast, deine Zahlen als Zahlen zu speichern, dann tu das. Dann funktioniert typeof.
Die von Raketenwilli notierte Abfrage Number.isNaN(arr[i]*1)
sieht merkwürdig aus, aber die Sache mit der Zahlenerkennung ist tatsächlich nicht so einfach.
Das funktioniert zwar, ist aber nicht 100% klar. Eine klarere Formulierung ist aus meiner Sicht der Test isNaN(Number(arr[i]))
. Damit wird das Array-Element explizit in eine Zahl konvertiert, das Ergebnis ist entweder eine gültige Zahl (dann liefert isNaN false) oder eben NaN und dann liefert isNaN true. Andererseits spricht auch nichts gegen einen typeof Test, nachdem Du den Wert mit Number versuchsweise konvertiert hast.
Also so:
let num = Number(arr[i]);
if (typeof(num) == 'number'
// Als Zahl verarbeiten
}
else {
// Als String verarbeiten
}
oder so
let num = Number(arr[i]);
if (!isNaN(num)) {
// Als Zahl verarbeiten
}
else {
// Als String verarbeiten
}
Im zweiten Beispiel könnte man den then und else Teil auch vertauschen, um den Not-Operator weglassen zu können.
Rolf
Erstmal vielen Dank !
Ich werde mich intensiv mit den Antworten beschäftigen. Das dauert aber!
Wenn ich noch Fragen habe, werde ich mich später melden.
Gruß Effel
Hallo Rolf!
Es funktioniert! Habe meine ganzen Programme umgemoddelt und es läuft gut
Besten Dank - auch an die anderen Schreiber
Gruß Effel