只是好奇心问题.使用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上测试.
在下面的:
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,最后将它们都设置为数组中的最后一个值。