编写程序以查找数组中的最大值

时间:2011-10-23 23:07:23

标签: javascript

  

可能重复:
  JavaScript: min & max Array values?

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);

我正在尝试编写一个程序来查找数组中的最大数字,但我的代码无效。有什么帮助吗?

5 个答案:

答案 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)

这有点聪明,但非常简洁,效果很好。

只需在apply()上调用Math.max()并将数组作为参数传递。

var maxValue = Math.max.apply(null, arr);

jsFiddle

答案 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

演示:http://jsfiddle.net/TkeHb/

答案 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.maxArray.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原型中,但我认为核心原型相当丑陋。)