2017-05-06 3 views
2

以下の例で数値を使用すると、正しい戻り値/出力値が得られます。JavaScript配列が数値を返さない

var array = [1,2,4,5,]; 
divBy2 = v => v/2; 
var result = array.map(divBy2); 

これを試してみると、私はNaVを取得します。

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

私のコードは以下のように書かれています。基本的に、私は次の行でテキストファイルをロードしています:

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

は、その後、私は配列を作成し、文字列全体せずに数字だけを返すには2で、これらの数字と格差を取りたいです。

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

配列=出力を、入れ子にされた配列は必要ありません...なぜ配列を必要とするのですか? –

+0

これは何らかの割り当てですか? http:// stackoverflow。com/questions/43705581/javascript-use-array-to-calculate-some-coordinates/43705727 –

+0

「NaV」とは、NaNを意味しましたか? – Pang

答えて

1
  1. のようにあなたがカンマで区切られた構文の仕事を得るために、配列内の文字列を配置することはできません、出力を超えるマップすることができ、それは一つの文字列の配列を作成します("1,2,3")を使用してください。

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)

  • outputString.prototype,split
  • を使用してアレイに分割し、コード内のカンマで区切られた文字列(999.000,999.000,999.000,999.000,999.000,999.000,999.000,999.000,999.000)であります

    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);
    あなたのコードを見てみることを

    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

    あなたの助けてくれてありがとう...ちょうどもう1つの質問...多くの小数点を持つ私の "出力"戻り値、つまり3.77777,2.455555,83.2333。私は3つの小数点が必要です。ありがとう –

    +0

    @AlexaAtnaあなたは['toFixed(3)'](http://stackoverflow.com/questions/11832914/round-to-at-most-2-decimal-places-only-if-necessary)を使うことができます。小数点以下3桁まで調整した文字列を返します。ほとんどの場合。 (**正確性が必要な場合は、より正確な方法で浮動小数点演算を実装するライブラリを調べなければならない場合、近似はすべての端数で完璧ではないことに注意してください。**) – sabithpocker

    0

    コードに間違いがあります。

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

    上記のコード行はあなたに配列を返します。だから、単にこの

    var array = output; 
    

    を行うことができたりmapは数ではなく、アレイに自分自身を適用しようとしているので、他のあなたは、一度あなたがそうなエラーを取得している

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

    変数を定義することができます。

    array=[output]を使用しないでください。出力が既に配列の場合は、[[3,5,656,34,23]]のようなものが得られ、マップ関数は各要素ではなく内部配列全体を2で分割しようとします。

    array=outputはトリックを行う必要があり、さらに、あなただけの、var result = output.map(divBy2);

    関連する問題