2017-12-02 205 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));

相关问题