2017-10-19 65 views
1

我正在學習JavaScript,並被要求創建一個解決方案,以查找並返回數組的最大整數創建一個隨機數組返回最高數字Javascript

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

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

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

通過找到我想就這個問題展開的解決方案創建一個隨機排列第一,然後返回從中最高值後:

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]); 

雖然這種方法解決了這個問題,它缺乏我正在尋找的微妙之處。例如,是否有將randomArray()嵌套到largestNumber()的方法。有沒有辦法撥打largestNumber(numbers)而不是largestNumber([numbers])。對於我的解決方案和其他可能的解決方案的建議的反饋將不勝感激,謝謝。

+3

* 「有沒有辦法來調用largestNumber(數字),而不是largestNumber([數字])」 * - 當你向它添加'.map()'時,你改變了'largestNumber()'來期待一個數組的數組。原始函數並不關心你傳遞的數組是否是隨機的,不需要改變它。 – nnnnnn

回答

2

有沒有辦法撥打largestNumber(numbers)而不是largestNumber([numbers])

我先介紹這是因爲它是最容易的部分:根本變化largestNumber使用.map()方法 - 這就是爲什麼它現在預計數組的數組,並返回一個數組。

您的原始largestNumber()實現預期numbers是一維數組,並且這將適用於任何數組數組,無論該數組是否隨機填充。

是有辦法窩randomArray()largestNumber()

是。如果你只是想擺脫中間numbers可變的,你可以這樣做:

largestNumber(randomArray(5, 500)) 

或者,如果你的意思是你想移動的隨機部分largestNumber()函數體中,然後將它總是產生相同數量同樣大小的可能數量你可以直接嵌入調用randomArray(5, 500),而不是具有numbers說法:

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

或者您也可以使largestNumber()數組長度和隨機數限制參數:

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

反饋和我的其他可能的解決方案,解決方案和建議,將不勝感激

嵌入randomArray()largestNumber(),至少在沒有重命名功能largestRandomNumber()或一些東西。最好將這兩個功能分開,以便它們可以獨立使用。

+1

這不重要,但'Math.max(... a)'是新的'Math.max.apply(null,a)' –

0

像這樣的東西?擁抱ES6:

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)) 
2

嘗試運行該溶液(ES6):

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

其中大小是隨機陣列的長度和最大隨機化最大。

這可以很容易地分裂成3種獨立的方法(和感謝@Bergi爲Array.from):

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