JavaScript:数组中的最大值
Posted
技术标签:
【中文标题】JavaScript:数组中的最大值【英文标题】:JavaScript: greatest value in an array 【发布时间】:2021-01-16 07:34:07 【问题描述】:该函数仅在 first (arr[0]) 或 last index ( arr[arr.length-1]) 的数组。如何修复逻辑错误?
function isGreater(arr)
let a = arr[0];
for (let i = 0; i < arr.length; i++)
var isGreat = (a < arr[i]) ? arr[i] : a;
return isGreat;
console.log(isGreater([7, 9, 10000, 11, 25, 20]));
// output=> 20, expected output 10000
console.log(isGreater([7, 11, 25, 2]));
// output=> 7, expected output 25
【问题讨论】:
试试Math.max.apply(null, [7, 9, 10000, 11, 25, 20])
。
Math.max.apply(null, [7, 9, 10000, 11, 25, 20])
但无论如何,你需要有一个变量,在循环之前设置为 0,在每个循环中设置为自身或当前数组元素中的较大者。
这能回答你的问题吗? Finding largest integer in an array in javascript
我认为使用扩展运算符比使用Function.prototype.apply
更干净。在这种情况下,Math.max(...[7, 9, 10000, 11, 25, 20])
最终,浏览器之间的性能会有所不同,并且两者都可能导致大型数组的堆栈溢出,因此这确实是个人喜好问题。
【参考方案1】:
逻辑错误是您将arr[i]
或a
分配给isGreat
,但从未将isGreat
与arr[i]
进行比较。
只需重复使用a
,而不是使用isGreat
:
function isGreater(arr)
let a = arr[0];
for (let i = 1; i < arr.length; i++)
a = a < arr[i] ? arr[i] : a;
return a;
console.log(isGreater([7, 9, 10000, 11, 25, 20]));
console.log(isGreater([7, 11, 25, 2]));
请注意,我更新它以跳过循环中的第一个索引,因为 a
已经包含该值。
这一行:
a = a < arr[i] ? arr[i] : a;
如果您愿意,可以这样:
if (a < arr[i])
a = arr[i];
我认为这是一个练习。如果没有,您可以像这样更直接地获得结果:
// ES2015+
function isGreater(arr)
return Math.max(...arr);
或者这个:
// ES5 and earlier
function isGreater(arr)
return Math.max.apply(Math, arr);
【讨论】:
【参考方案2】:您需要将数组的第一个值作为实际最大值并从索引1
开始循环。不需要a
,对数组的另一个引用。
在循环内部检查isGreat
是否小于实际值并更新isGreat
。
该检查可防止对旧的和新的最大值进行多余的分配。
function isGreater(arr)
let isGreat = arr[0];
for (let i = 1; i < arr.length; i++)
if (isGreat < arr[i])
isGreat = arr[i];
return isGreat;
console.log(isGreater([7, 9, 10000, 11, 25, 20])); // 10000
console.log(isGreater([7, 11, 25, 2])); // 25
【讨论】:
【参考方案3】:你应该这样做:
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
【讨论】:
【参考方案4】:首先,您在循环内定义了isGreat
,因此每次迭代都会重新定义它。试试这个:
function isGreater(arr)
let greatest = arr[0];
for(let i = 0; i < arr.length; i++)
if(arr[i] > greatest)
greatest = arr[i];
return greatest;
console.log(isGreater([0, 4, 6, 1, 3]))
【讨论】:
【参考方案5】:当您找到最大值时,您应该尝试将当前值与当前最大值进行比较,以便在迭代过程中最大的值会发生变化。
这是一个例子
function isGreater(arr)
let greatest = arr[0];
for (let i = 1; i < arr.length; i++)
greatest = greatest < arr[i] ? arr[i] : greatest;
return greatest;
【讨论】:
【参考方案6】:尽管您可能已经有了更好的答案,但我是这样做的:
const isGreater = arr =>
return arr.sort((a, b) => b - a)[0];
;
这只是对数组进行降序排序,并返回新排序数组的第一个元素。
【讨论】:
以上是关于JavaScript:数组中的最大值的主要内容,如果未能解决你的问题,请参考以下文章