2017-05-29 8 views
0

入力に応じて、関数は 'start'から 'end'までの 'num'要素の配列を返す必要があります。 'type'引数は、整数( '1')か浮動小数点( '0')かを決定します。 最初に 'num'長さの新しい配列が作成され、生成された整数または10進数でなければならないかどうかを判断するswitch文があります。 私はそれらを返すことに問題があるようです。乱数を生成する関数は、Mozillaの開発者のWebサイトから取得したものです。全体の思考は、React Nativeのアクションクリエイターでフィードされますが、私はそれがここでは関係ないと思います。JavaScript-switch条件を返す配列

export const genNum = (start, end, num, type) => { 
    let numberArray = new Array(num); 

    switch (type) { 
    case 1: 
     return numberArray.map(function(num) { 
     let min = Math.ceil(start); 
     let max = Math.floor(end); 
     return Math.floor(Math.random() * (max - min)) + min; 
     }); 
    default: 
     return numberArray.map(function(num) { 
     return Math.floor(Math.random() * (max - min)) + min; 
    }); 
    } 
}; 

EDIT: 私はそれが両方のケースを組み合わせるしようとして、それが重複しないと思います。私はまだ不必要なswitch文を取り除くためにreduce()を読んでいます。私はあなたの訂正を取ってきました。現時点では、次のようになります(浮動小数点数を2dpに丸める必要があります)。

export const genNum = (start, end, num, type) => { 
    let numberArray = new Array(num).fill(-1); 

    switch (type) { 
    case 1: 
     return numberArray.map(function(num) { 
     let min = Math.ceil(start); 
     let max = Math.floor(end); 
     return Math.floor(Math.random() * (max - min)) + min; 
     }); 
    default: 
     return numberArray.map(function(num) { 
     let min = start; 
     let max = end; 
     return (Math.random() * (max - min)) + min; 
    }); 
    } 
}; 
+2

それを返すことで何の意味がありますか?私はあなたのコードを読むと、それは配列が正常に返されるようですが、それは 'map'は何もしませんので、エントリのない配列です(mapは各エントリに対してコールバックを一度実行しますが、コールバックが実行されないことを意味するエントリ)。最終結果は、長さがnumと等しく、エントリがない配列を返します。 – Paulpro

+0

これは複雑な 'reduce()'のように見えます。なぜあなたは 'switch 'と' map() 'の複製が必要でしょうか? – charlietfl

+0

[特定の範囲のJavaScriptでランダムな整数を生成する]の可能な複製?(https://stackoverflow.com/questions/1527803/generating-random-whole-numbers-in-javascript-in-a-specific-range) – num8er

答えて

-1

0(デフォルト)のケースでは、minとmaxが定義されていないため、おそらくすべてゼロが返されます。さらに浮動小数点数が必要な場合は、Math.floorは必要ありません。

編集:おそらく、魔法の代わりに配列を初期化せずに逃げないので、実際には0からnum-1まで数えて昔ながらのforループを使いたいかもしれません。

+0

map()が空のスロットの配列を繰り返すことはありません...スイッチは冗長であることは言うまでもありません。 – charlietfl

+0

downvotesのおかげで、とにかく数字を生成できないという事実に対処しました。 – tevemadar

+0

@charlietfl yep、私は編集しました。しかし、スイッチは冗長ではないため、2番目のケースではフロアを使用しないでください。 – tevemadar

2

アレイを適切に初期化すると、問題の一部が解決されます。実際には値が含まれていないため、作成中の配列にマップすることはできません。私はあなたがあなたの配列を定義する行を変更勧め:

let numberArray = Array(num).fill(-1); 

次に、あなたのコード内の他の問題(のような、minとmax第2ケースブロックで定義されていない、と浮動小数点のいくつかに対処することができますあなたがそれらを整数に丸めているために働いていない部分)