var test = [-42, 0, 8];
var biggest=-Infinity;
for (i=0; i<test.length;i++)
{if (test[i]>biggest)
alert('It is!');
biggest = test[i];
else
alert("It isn't!");}
alert("The biggest element is:" + biggest);
我正在尝试编写一个程序来查找数组中的最大数字,但我的代码无效。有什么帮助吗?
答案 0 :(得分:8)
你被“太少支撑”的bug所困扰:
if (test[i]>biggest)
alert('It is!');
biggest = test[i]; // THIS IS NOT INSIDE THE IF!
如果您解决此问题,it works just fine。
当然,您可以使用Math.Max
轻松完成此操作,因为此MDN documentation示例显示:
function getMaxOfArray(numArray) {
return Math.max.apply(null, numArray);
}
答案 1 :(得分:4)
答案 2 :(得分:1)
虽然您应该听@alex,但如果没有Math.max
,您就可以这样做,并且您想要编写C风格的代码:
var test = [-42, 0, 8];
var biggest = -Infinity;
for(var i = 0; i < test.length; ++i)
if(test[i] > biggest)
biggest = test[i];
alert("The biggest element is:" + biggest);
答案 3 :(得分:1)
另一种解决方案
function nsort(a,b){
return a - b;
}
var test = [-42, 0, 8, 3, 15, 12],
max = test.sort(nsort).pop(); // 15
答案 4 :(得分:1)
ECMAScript第5版为数组引入了一些高阶函数 - yay!。
一个是Array.reduce
(也称为left fold):
因此,这可以解决为:
var arr = [-42, 0, 8]
var res = arr.reduce(function (prev,cur) {
return cur > prev ? cur : prev
}, -Infinity)
res // 8
在这种情况下,将数组作为参数应用于Math.max
并不像“优雅”,但是高阶函数可以很好地添加到“工具箱”;-)考虑稍微修改以找到数组中最长的字符串:
var arr = ["Hello", "World!!!", "Wut?"]
var res = arr.reduce(function (prev,cur) {
return cur.length > prev.length ? cur : prev
}, "")
res // "World!!!"
使用Math.max
或Array.sort
和index / pop尝试 ; - )
快乐的编码。
虽然上面是第5版,但是可以为ECMAScript 3rd Edition(又名JavaScript 1.5)编写一个简单的reduce函数,并且等效的函数是许多库的一部分:
function reduce (arr, fn, v) {
for (var i = 0; i < arr.length; i++) {
v = fn(v, arr[i])
}
return v
}
// used as:
reduce(arr, function (prev,cur) { ... }, initValue)
(这可以添加到Array原型中,但我认为核心原型相当丑陋。)