2017-12-02 220 views
1

我在for循環中使用函數時遇到了麻煩。首先看一下代碼,請:如何在沒有返回選項的情況下在JavaScript中完成功能

let list1 = [4168,3925,858,2203,440,185,2886,160,1811,4272,4333,2180,174,157,361,1555]; 
 

 
let max = 0; 
 

 
function maximum(listNumb1) { 
 
\t for (let i = 0; i < listNumb1.length; i++) { 
 
\t \t if (listNumb1[i] > max) { 
 
\t \t \t max = listNumb1[i]; 
 
\t \t \t return max; 
 
\t \t } 
 
\t } 
 
} 
 

 
console.log(maximum(list1));

好吧,我試圖讓功能會發現上面的數組中的最大數量。我沒有一個函數,代碼工作,但是當我想要一個函數,所以我可以用它與多個數組,我卡住了,我沒有得到所需的輸出。

我知道我的問題在哪裏。這是回報的一部分。它停止代碼執行進一步,我得到的數組的第一個數字作爲輸出,因爲for循環在返回後停止。

我要求解決方案我應該如何結束,或者我應該使用什麼而不是返回,所以我不會打破循環,函數將繼續迭代通過數組中的其餘數字,並且最大變量會改變,直到找到數組中最大的數字?

回答

2

您需要迭代到最後,因爲您不知道最後一個元素是否大於之前找到的值。

將返回值移到該函數的末尾,並使用局部變量max保留臨時最大值。

一個好主意是從數組的第一個元素開始,作爲max的值,並從索引1開始迭代。

function maximum(array) { 
 
    var max = array[0], 
 
     i; 
 

 
    for (i = 1; i < array.length; i++) { 
 
     if (array[i] > max) { 
 
      max = array[i]; 
 
     } 
 
    } 
 
    return max; 
 
} 
 

 
let list1 = [4168, 3925, 858, 2203, 440, 185, 2886, 160, 1811, 4272, 4333, 2180, 174, 157, 361, 1555]; 
 

 
console.log(maximum(list1));

+0

好的,非常感謝你:)我解決它。 –

0

這是更好地做一個函數,將回報最大文件,而不是修改一些全局變量。

你可以做這樣的事情:

let list1 = [4168, 3925, 858, 2203, 440, 185, 2886, 160, 1811, 4272, 4333, 2180, 174, 157, 361, 1555]; 
 

 

 
function findMax(list) { 
 
    return list.reduce((currentMax, currentNumber) => { 
 
    return Math.max(currentNumber, currentMax); 
 
    }, 0); 
 
} 
 

 
console.log(findMax(list1));

此功能使用Array.reduce,謀取最大價值。

+0

您可以使用'Math.max(max,currentNumber);'而不是三進制。 –

+0

你是對的:]會更新 – felixmosh

0

另一種方法來找到最大是spreadingMath#max

const list1 = [4168,3925,858,2203,440,185,2886,160,1811,4272,4333,2180,174,157,361,1555]; 
 

 
const maximum = (arr) => Math.max(...arr); 
 

 
console.log(maximum(list1));

相關問題