2017-10-19 4 views
1

JavaScriptを学んでいて、の配列を見つけて返します。の最大整数を返します。乱数の配列を作成する最高の数のJavaScriptを返す

function randomArray(length, max) { 
    return Array.apply(null, Array(length)).map(function(numbers) { 
    return Math.round(Math.random() * max); 
    }); 
} 

let numbers = randomArray(5, 500) 

function largestNumber(numbers) { 
    return numbers.map(function(randomArray) { 
    return Math.max.apply(null, randomArray); 
    }); 
} 

console.log(numbers); 
largestNumber([numbers]); 

このメソッドは、問題を解決しますが、それが欠けている:それから最高値を返すまずランダムアレイを作成私はで質問を拡張したかった解決策を見つけた後

let numbers = [1, 2, 3, 4, 5] 

function largestNumber(numbers) { 
    return Math.max.apply(null, numbers); 
} 

console.log(numbers); 
largestNumber(numbers); 

私が探していた繊細さ。たとえば、randomArray()largestNumber()にネストする方法があります。 largestNumber([numbers])の代わりにlargestNumber(numbers)に電話する方法はありますか?私のソリューションのフィードバックと、他の可能な解決法に関するアドバイスをいただければ幸いです。ありがとうございます。

+3

* "の代わりにlargestNumber([番号])のlargestNumber(数字)を呼び出す方法があります" * - あなたが '.map()'を追加したときに、配列の配列を期待するために 'largestNumber()'を変更しました。元の関数は、渡した配列がランダムであるかどうかに関わらず、変更する必要はありませんでした。 – nnnnnn

答えて

2

largestNumber([numbers])の代わりにlargestNumber(numbers)を呼び出す方法はありますか?

それが最も簡単な部分ですので、私は最初にこれをカバーします:.map()メソッドを使用するには、単にんではない変更largestNumber - それは今配列の配列を期待して、配列を返す理由です。

オリジナルlargestNumber()の実装は1次元配列であると予想されます。これは、その配列がランダムに配置されたかどうかにかかわらず、任意の数の配列で機能します。

largestNumber()

はいに巣randomArray()への道があります。

largestNumber(randomArray(5, 500)) 

それともあなたはlargestNumber()関数本体内のランダムな部分を移動したいものであれば、それは常に同じ番号を生成持っている:あなたはちょうど中間numbers変数を取り除きたい場合は、これを行うことができます

function largestNumber() { 
    return Math.max.apply(null, randomArray(5, 10)); 
} 

それとも、配列の長さとlargestNumber()の乱数制限引数を行うことができます:

をあなただけの代わりに、直接 numbers引数を持つの randomArray(5, 500)への呼び出しを埋め込むことができ、同じサイズの可能な数の
function largestNumber(length, max) { 
    return Math.max.apply(null, randomArray(length, max)); 
} 

他の可能な解決策で私の解決策やアドバイスのためのフィードバックが大幅に

をいただければ幸い私はないは少なくともないlargestRandomNumber()に機能の名前を変更せずに、largestNumber()randomArray()を埋め込むでしょうか何か。独立して使用できるように、2つの機能を別々に保つ方がよい。

+1

'Math.max(... a)'は新しい 'Math.max.apply(null、a)'です。 –

0

これは何か?この溶液(ES6)を実行する

2
const randomArray = (length, max) => { 
    return Array(length).fill().map((el) =>{ 
    return Math.round(Math.random() * max) 
    }) 
} 

const largestNumber = (numbers) => { 
    return Math.max(...numbers) 
} 

largestNumber(randomArray(5, 500)) 

試行:

const run = (size, max) => 
    Math.max(...[...new Array(size)].map(() => Math.round(Math.random() * max))); 

サイズは、ランダム配列の長さであり、最大はランダマイザ最大でES6を包含する。

これは、簡単に( Array.fromため@Bergiすると感謝)3つの別の方法に分けることができ

const getRandomList = (length, max) => 
    Array.from({length},() => Math.round(Math.random() * max)); 
const getMax = (list) => Math.max(...list); 
const run = (length, max) => getMax(getRandomList(length, max)); 
+0

'fill'の代わりに空の配列を広げることはできません。非常に素晴らしい。 – Andrew

+1

'Array.from({length:size}、()=> ...)'を使うことをお勧めします。それはより短く、より読みやすく、より効率的です。 – Bergi

+0

@Bergiあなたは間違いなく正しい!私は答えを更新しました。 – dhilt

関連する問題