我正在从头开始学习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上制作的。
你能告诉我如何使这个功能甚至更好? 我认为这不是最有效的方式,执行上下文必须在整个时间段内保持整个数组,但我认为删除一些索引可能会增加处理时间。
感谢您的建议。
答案 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