Javascript初学者要求代码增强 - 最大号码任务

时间:2016-05-21 17:28:41

标签: javascript

我正在从头开始学习javascript,一个在线课程让我找到了使用javascript从给定的数字字段中找出最大数字。

这就是我所做的:

function biggest(array) {
for (var i = 0; i < array.length; i++) {
  if (array[i] > array[i+1]) {
    if (array[i] >= array[0]) {
      array[0] = array[i];
    }
  }
  else {
    if (array[i+1] >= array[0]) {
      array[0] = array[i+1];
    }
  }
}
  return array[0];
}

var array = [10,12,15,3,5,22,2];
console.log(biggest(array));

我是在codepen here上制作的。

你能告诉我如何使这个功能甚至更好? 我认为这不是最有效的方式,执行上下文必须在整个时间段内保持整个数组,但我认为删除一些索引可能会增加处理时间。

感谢您的建议。

4 个答案:

答案 0 :(得分:6)

首先,将第一个值设为最大值,然后检查任何大于该值的值,将之前的最大值替换为当前最大值。

像这样:

var max = array[0];
for (var i = 1; i < array.length; i++) {
    if (max < array[i])
       max = array[i];
}
  return max;

DEMO

答案 1 :(得分:4)

表演几乎不重要。特别是在Javascript中。编写可读和可维护的代码更为重要。

你的代码修改了数组,这使得第二个数组不可能,因为在调用了largest()之后,数组是不同的。

我会建议这样的事情:

function biggest(array)
{
     return array.reduce((acc, curr) => acc < curr ? curr : acc);
}

答案 2 :(得分:2)

这是一种不修改函数中给定参数的好习惯。迭代数组,如果当前项目大于max,到目前为止;将max设置为当前项。并且对于初始化也将第一项设置为max这是函数:

function biggest(givenArray){
    givenArray = givenArray || [];
    var max = undefined;
    for(var i = 0; i < givenArray.length; i++){
         if(max === undefined || max < givenArray[i]){
             max = givenArray[i];
        } 
    }
   return max;
}

答案 3 :(得分:0)

如果您只想在集合(数组)中找到最大数字,以下将是最简单的方法IMO(使用ES6):

function biggest(array) {
    return Math.max(...array)
}
biggest([10, 12, 15, 3, 5, 22, 2]) // 22

Math.max()不接受数组作为参数,因此我们将传递spread,它允许表达式(数组)扩展为单独的参数。这样我们就可以毫无错误地使用Math.max()

或者,我们将使用Function.prototype.apply()来实现相同的输出。

function biggest(array) {
    return Math.max.apply(null, array)
}
biggest([10, 12, 15, 3, 5, 22, 2]) // 22

使用arrow functions我们可以提供(可以说)更高级别的功能清晰度,同时仍然使用扩展运算符Math.max()中构建我们的参数列表:

const biggest = array => Math.max(...array)
biggest([10, 12, 15, 3, 5, 22, 2]) // 22