![](/img/trans.png)
[英]Finding the next largest number in an array using JavaScript If…Else Statements
[英]JavaScript: if statement inside for loop (finding largest number from array)
我无法理解此代码如何从数字数组中找到最大的数字。 到目前为止,这是我的理解:
1)声明变量i,并将其赋值为0。
2)for循环:x从0开始,但是会随着x <integers.length(将是5?)的长而递增,所以我们将谈论x = 0-> 4
3)if语句是我感到困惑的地方。 “ integers”是参数,但是我们传递给它的参数是一个数组。 所以在我的脑海中,我看到[5,10,21,6,100] [x]> i。 因此,如果索引为1-> 4,它们都将仍然大于0。
let i = 0;
function findLargest (integers) {
for (let x=0; x<integers.length; x++) {
if (integers[x] > i) {
i = integers[x];
}
}
console.log(i);
}
findLargest([5, 10, 21, 6, 100]);
//Output: 100
没有什么意义? 这称为数组索引(通过指定索引从数组中获取值)。 语法为array[index]
所以,如果你有一个数组,说
var arr = [10, 6, 15]
您可以通过访问它的第二个元素
arr[1] // 6
数组不需要存储在变量中。 数组是值 (此外,它们是对象)。 因此[10, 6, 15][1]
具有与上面示例完全相同的效果。
在您的情况下, integers[x]
将是位置x处的元素。 使用0到长度-1循环是一种遍历数组的方法。 该函数遍历数组中的每个元素,并验证该元素是否大于找到的最后一个元素。 这样,它找到了最大的
注意:您拥有的算法并不完整,因为对于所有元素均小于0的数组,该算法将失败。在这种情况下,搜索不应从任意值(在您的情况下为0)开始,而应从的现有元素开始数组(通常是第一个)。 同样,多次调用该函数也会失败,因为变量x
是全局的,而不是函数的局部变量。 我建议删除代码的第一行,并在函数的开头添加新行:
var i = integers[0]
更新 (OP编辑了问题之后)是的,它们都将大于0,但是您并不是 每次都在搜索大于0。 线
i = integers[x]
将I的值更改为最初发现大于0的元素。 因此,下一次搜索将比该元素更大。 看起来像这样。 让我们看一下这个数组: [5, 7, 2, 12, 0]
5 > 0 (TRUE) => i = 5
7 > 5 (TRUE) => i = 7
2 > 7 (FALSE)
12 > 7 (TRUE) => i = 12
0 > 12 (FALSE)
您可以使用带有索引的数组,然后转到每个值,然后检查并查看哪个值用于比较以及哪个值更改。
在循环中,您可以添加带有索引,两个要比较的值,比较结果和i的新值(如果更改)的console.log
,例如
console.log(x, array[x], i, array[x] > i, array[x] > i && array[x])
[5, 10, 21, 6, 100][x] > i
有价值观
[5, 10, 21, 6, 100][0] > 0 5 > 0 -> i = 5 [5, 10, 21, 6, 100][1] > 10 10 > 5 -> i = 10 [5, 10, 21, 6, 100][2] > 21 21 > 10 -> i = 21 [5, 10, 21, 6, 100][3] > 6 6 > 21 [5, 10, 21, 6, 100][4] > 100 100 > 21 -> i = 100
function findLargest(integers) { var i = integers[0], // take the first element of the array x; for (x = 1; x < integers.length; x++) { // iterate from the second element console.log(x, integers[x], i, integers[x] > i, integers[x] > i && integers[x]); if (integers[x] > i) { i = integers[x]; } } return i; } console.log(findLargest([5, 10, 21, 6, 100]));
您也可以使用reduce而不是循环。
function findLargest (integers) {
if(integers.length===0){
return;//return undefined for empty array since there is no lowest
}
return integers.reduce(
function(highest,current){
return (current>highest)
? current
: highest
}
);;
};
findLargest([5, 10, 21, 6, 100]);
对于许多可以通过reduce解决的过程,您还可以使用递归 :
function findLargest (integers) {
var recur = function(highest,numbers){
if(numbers.length===0){//processed all numbers, return highest
return highest;
}
if(numbers[0]>highest){
highest=numbers[0];
}
//call itself again with highest and numbers without the first element
return recur(highest,numbers.slice(1));
};
//return recursive function recur
return recur(integers[0],integers.slice(1));
};
findLargest([5, 10, 21, 6, 100]);
这不是一种非常有效的方法,但是代码量最少(建议不要使用大型数组或使用较小数组多次调用的代码)。
function findLargest (integers) {
//map integers so you have a copy of integers
// this because .sort is a mutator methods and will
// change integers if you don't copy it first
return integers.map(x=>x).sort((a,b)=>a-b).slice(-1)[0];
};
findLargest([5, 10, 21, 6, 100]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.