2016-03-20 23 views
2

Der Zweck dieser Funktion besteht darin, die Leerstellen einer gegebenen Zeichenfolge zu entfernen, sie dann in eine Zahl umzuwandeln und schließlich jedes Zeichen der Zahl in ein leeres Array zu schieben "24532", sollte das folgende [2,4,5,3,2] in das Array schieben. Wenn ich jedoch mein Ausgabe-Array am Ende der Funktion trete - erhalte ich NaN-Werte im Ausgabe-Array. Jeder Schritt in der Funktion macht Sinn für mich, aber ich bin mir nicht sicher, wo mein Fehler liegt. Jede Hilfe wird geschätzt!Kann NaN-Werte nicht aus meiner Funktion in JS entfernen

function convert(numbers){ 
    var notString = parseInt(numbers.replace(/\s+/g, ''), 10), 
    sNumber = notString.toString(), 
    output =[]; 

    console.log(sNumber); 

    for(var i = 0; i < sNumber.length; i+=1) { 
     output.push(+sNumber.charAt[i]);  

    } 
    console.log(output); 

    } 

    convert("1 2 2 2 2"); 
+2

Das Problem ist, dass Sie '[]' 'nach charAt' statt'() '. Also sollte es '+ sNumber.charAt (i)' sein. Jetzt ruft es die Funktion auf anstatt auf eine Eigenschaft zuzugreifen. –

+0

Der Ausdruck "sNumber.charAt [i]" ist nicht definiert. (Javascript stört nicht, dass Sie versuchen, eine Funktion zu dereferenzieren). Der unäre Plus-Operator versucht, undefined in eine Zahl zu konvertieren und NaN zu erzeugen und dieses in Ihr Array zu schieben. ('push (+ sNumber.charAt [i]) ~~> drücke (+ undefiniert) ~~> drücke (NaN)'). Ihr Beispiel endet mit einem Array von 5 x NaN – Tibrogargan

Antwort

0

Entfernen Sie die + vor sNummer im Push-Gerät. Anstelle von console.log verwenden Sie auch console.dir

function convert(numbers){ 
     var arystrNumbers = numbers.split(" "), aryNumbers = []; 

     for(var idx in arystrNumbers) { 
     aryNumbers.push(parseInt(arystrNumbers[idx]));  
     } 
     return aryNumbers; 
    }; 


    console.log("Before: " + strNumbers); 
    console.dir(convert("1 2 2 2 2")); 

Versuchen Sie das obige.

+0

Warum würde er das '+' entfernen? Das ist genau dort erforderlich. –

+0

Zu welchem ​​Zweck? Es ist nicht erforderlich. Es sollte lesen: output.push (sNumber [i]); – SPlatten

+0

Für den gleichen Zweck, für den Sie Ihre Antwort mit 'parseInt()' ergänzt haben. 'output.push (sNumber [i])' drückt eine Zeichenkette in das Array. Das '+' wandelt es in eine Zahl um. –

1

Warum diese

function convert(numbers){ 
    return numbers.replace(/\s+/g,'').split(''); 
} 

console.log(convert("1 2 2 2 2")); 

Eigentlich nicht mögen, wenn es immer nur ein Leerzeichen ist, Sie diese

console.log("1 2 2 2 2".split(' ')); 
1

Hoffnung machen kann, das hilft https://jsfiddle.net/x0mubx4q/

output.push(sNumber[i]); 

Das Problem liegt in der Funktion .chartAt(). Dies wird eine Zeichenfolge zurückgeben.

+0

Ja, Sie können + Zeichen für eine Nummer verwenden. Es wird jetzt funktionieren. –

2

Warum nicht String#split() verwenden?

function convert(numbers) { 
 
    return numbers.trim().split(/\s+/).map(Number); 
 
} 
 

 
document.write('<pre>' + JSON.stringify(convert(" 1 2 2 2 2 "), 0, 4) + '</pre>');

+1

Das ist der Weg zu gehen, außer dass Sie '.trim()' die Zeichenfolge vor dem Aufteilen sollten. +1 –

0

Sie sollten split Funktion als @Nina sagte, aber wenn Sie daran interessiert, wo ist dein Fehler, können Sie versuchen, diese:

ersetzen

charAt[i] 

bis

charAt ist eine Funktion, und Sie müssen Klammern verwenden () es zu nennen

Verwandte Themen