在javascript中使用reduce函数查找最小和最大数量的数组

cez*_*ann 8 javascript

只是好奇心问题.使用reduce函数,我们可以轻松地分别找到数组中最小和最大的数字.就像那样:

var a = [1,2,3,4,5,1,-1,6,7,8,9,10,2,11];
a.reduce(function(prev,cur,index,array){
    return prev > cur ? prev : cur;
}); // returns 11

a.reduce(function(prev,cur,index,array){
    return prev < cur ? prev : cur;
}); // returns -1
Run Code Online (Sandbox Code Playgroud)

鉴于此,为什么这不起作用?

var a = [1,2,3,4,5,1,-1,6,7,8,9,10,2,11];
var smallest = 0;
var biggest = 0;
a.reduce(function(prev,cur,index,array){
    smallest = prev < cur ? prev : cur;
    biggest =  prev > cur ? prev : cur;
});
console.log([smallest, biggest]); // prints [11,11]
Run Code Online (Sandbox Code Playgroud)

在repl.it上测试.

Rob*_*obG 7

在下面的:

a.reduce(function(prev,cur,index,array){
    smallest = prev < cur ? prev : cur;
    biggest =  prev > cur ? prev : cur;
});
Run Code Online (Sandbox Code Playgroud)

提供给reduce的函数没有return语句,因此返回undefined。因此,在第一次迭代之后,prev设置为undefined

如果抽象关系比较算法中的任何一个表达式都未定义,则该表达式返回undefined(请参阅步骤3.c),其结果为false。因此,从第二次迭代开始,将最小最大都设置为cur,最后将它们都设置为数组中的最后一个值。