JavaScript:数组中的最大值
如果函数位于数组的第一个(arr[0])或最后一个索引(arr[arr.length-1]),则该函数仅返回最大数。如何修复逻辑错误JavaScript:数组中的最大值,javascript,arrays,logic,Javascript,Arrays,Logic,如果函数位于数组的第一个(arr[0])或最后一个索引(arr[arr.length-1]),则该函数仅返回最大数。如何修复逻辑错误 功能更大(arr){ 设a=arr[0]; for(设i=0;i7,预期输出25逻辑错误是您将arr[i]或a分配给isGreat,但从不将isGreat与arr[i]进行比较 只需重用a而不是使用isGreat: 功能更大(arr){ 设a=arr[0]; for(设i=1;i
功能更大(arr){
设a=arr[0];
for(设i=0;i20,预期输出10000
log(大于[7,11,25,2]);
//输出=>7,预期输出25
逻辑错误是您将arr[i]
或a
分配给isGreat
,但从不将isGreat
与arr[i]
进行比较
只需重用a
而不是使用isGreat
:
功能更大(arr){
设a=arr[0];
for(设i=1;i log(大于[7,11,25,2])
您需要将数组的第一个值作为实际最大值,并从索引1
开始循环。不需要a
,这是对数组的另一个引用
在循环内部检查isGreat
是否小于实际值,并更新isGreat
该检查可防止对新旧最大值进行多余的赋值
功能更大(arr){
设isGreat=arr[0];
for(设i=1;i
您应该这样做:
function fun(){
let arr = [7, 9, 10000, 11, 25, 20];
let a = arr[0];
for (let i = 0; i < arr.length; i++) {
a = (a < arr[i]) ? arr[i] : a;
}
return a; //Returns 10000
}
函数fun(){
设arr=[7,9,10000,11,25,20];
设a=arr[0];
for(设i=0;i
首先,您在循环中定义了很好
,因此每次迭代都会重新定义它。试试这个:
功能更大(arr){
设最大值=arr[0];
for(设i=0;i最大值){
最大值=arr[i];
}
}
回报最大;
}
console.log(更大([0,4,6,1,3])
当您找到最大值时,您应该尝试将当前值与当前最大值进行比较,以便最大值在迭代过程中发生变化
这就是一个例子
function isGreater(arr) {
let greatest = arr[0];
for (let i = 1; i < arr.length; i++) {
greatest = greatest < arr[i] ? arr[i] : greatest;
}
return greatest;
}
功能更大(arr){
设最大值=arr[0];
for(设i=1;i
尽管您可能已经有了更好的答案,但我还是这样做了:
const isGreater = arr => {
return arr.sort((a, b) => b - a)[0];
};
这只是按降序对数组进行排序,并返回新排序数组的第一个元素。尝试
Math.max.apply(null[7,9,10000,11,25,20])
Math.max.apply(null[7,9,10000,11,25,20])
但在任何情况下,都需要在循环之前将变量设置为0,设置为自身或每个循环中当前数组元素的较大值。这是否回答了您的问题?我认为使用扩展运算符比使用Function.prototype.apply
更干净。在这种情况下,Math.max(…[7,9,10000,11,25,20])
最终,不同浏览器的性能会有所不同,并且两者都可能导致大数组的堆栈溢出,因此这实际上是个人偏好的问题。