2017-05-06 7 views
2

Wenn ich im folgenden Beispiel Zahlen verwende, bekomme ich die korrekte Rückgabe/Ausgabe.JavaScript-Array gibt keine Zahlen zurück

Wenn ich dies unten versuche, bekomme ich NaV.

var array = [output]; 
divBy2 = v => v/2; 
var result = array.map(divBy2); 

Mein Code ist wie folgt geschrieben. Grundsätzlich bin ich Laden einer Textdatei mit der folgenden Zeile:

Numbers (999.000,999.000),(999.000,999.000), 

Dann möchte ich ein Array erstellen und diese Zahlen und teilen sich nehmen von 2. Um ohne die gesamte Zeichenfolge nur die Zahlen zurück.

var reader = new FileReader(); 

function readText(that){ 

     if(that.files && that.files[0]){ 
      var reader = new FileReader(); 
      reader.onload = function (e) { 
       var output=e.target.result; 


output=output.split("\n").filter(/./.test,/Numbers/).join("\n").replace(/[^0-9.,]/g,''); 

var array = [output]; 
divBy2 = v => v/2; 
var result = array.map(divBy2); 

document.getElementById('inputTextToSave').innerHTML= output; 
+0

array = Ausgang; Sie wollen nicht ein verschachteltes Array ... auch, warum Sie beitreten(), wenn Sie ein Array wollen? –

+0

Ist das eine Art Auftrag? http: // Stapelüberlauf.com/questions/43705581/javascript-use-an-array-zu-berechnen-einige-Koordinaten/43705727 –

+0

Mit 'NaV', meinst du' NaN'? – Pang

Antwort

1
  1. Sie können keinen String in Array platzieren das durch Komma getrennte Syntax Arbeit zu bekommen, erstellt es ein Array mit einem einzelnen String ("1,2,3") stattdessen.

let output = "1,2,3"; 
 
var array = [output];//doesnt work 
 
//this creates ["1,2,3"] 
 
//array[0] === "1,2,3" 
 
console.log("array", array); 
 

 
var array2 = output.split(",");//works but creates string array 
 
//this creates ["1","2","3"] 
 
//array2[0] === "1" 
 
//array2[1] === "2" 
 
//array2[2] === "3" 
 
console.log("array2", array2) 
 

 
var array3 = output.split(",").map(Number);//works and converts to number 
 
//this creates [1,2,3] 
 
//array2[0] === 1 
 
//array2[1] === 2 
 
//array2[2] === 3 
 
console.log("array3", array3) 
 

 
//The closest to your attemp is eval() which shouldnt be used in normal cases 
 
var array4 = eval("[" + output + "]"); 
 
console.log(array4)

  1. output eine durch Kommata getrennte Zeichenfolge in Ihrem Code ist (999.000,999.000,999.000,999.000,999.000,999.000,999.000,999.000,999.000), spaltete es in ein Array mit String.prototype,split

let output = `Numbers (999.000,999.000),(999.000,999.000), 
 
Numbers (999.000,999.000),(999.000,999.000), 
 
Numbers (999.000,999.000),(999.000,999.000), 
 
Numbers (999.000,999.000),(999.000,999.000)`; 
 

 
output=output.split("\n").filter(/./.test,/Numbers/).join("\n").replace(/[^0-9.,]/g,''); 
 
console.log(output); 
 
let array = output.split(","); 
 
console.log(array); 
 
let divBy2 = v => v/2; 
 
let result = array.map(divBy2); 
 
    console.log(result);

Um einen Blick auf den Code zu nehmen:

let output = "1, 2, 3"; 
 
var array = [output]; 
 
console.log(array);//["1,2,3"] 
 
divBy2 = v => v/2; 
 
var result = array.map(divBy2); 
 
console.log(result);//[NaN] as "1,2,3"/2 =NaN (not a number)

+0

Vielen Dank für Ihre Hilfe ... nur noch eine Frage ... meine "Ausgabe" gibt Zahlen mit vielen Dezimalstellen zurück .. d. H. 3,7777,2,455555,83,2333. Ich brauche nur 3 Dezimalpunkte. Danke –

+0

@AlexaAtna Sie können ['toFixed (3)'] (http://stackoverflow.com/questions/11832914/round-to-at-most-2-decimal-places-only-if-necessary) verwenden, was gibt eine auf 3 Dezimalstellen eingestellte Zeichenfolge zurück. in den meisten Fällen. (** Beachten Sie, dass Approximationen nicht für alle Brüche perfekt sind. Wenn Sie mehr Genauigkeit benötigen, müssen Sie Bibliotheken genauer untersuchen, die Fließkommaarithmetik implementieren. **) – sabithpocker

0

Es ist ein kleiner Fehler in Ihrem Code.

output=output.split(............); 

die obige Codezeile finden Sie eine Reihe zurück. So können Sie einfach tun, um diese

var array = output; 

oder sonst können Sie die Variable definieren sofort

var array=output.split(............); 
0

Sie wahrscheinlich einen Fehler bekommen, weil map versucht, sich eher auf ein Array anwenden als eine Zahl .

Verwenden Sie nicht array=[output]. Wenn Ausgabe bereits ein Array ist, dann würden Sie so etwas wie [[3,5,656,34,23]] bekommen, und die Map-Funktion würde dann versuchen, das gesamte innere Array durch 2 statt jedes Element zu teilen.

array=output den Trick tun soll, weiter, könnten Sie einfach Ausgang Karte über, wie var result = output.map(divBy2);