使用javascript中的reduce函数查找数组的最小和最大数
Find smallest and biggest number of an array with reduce function in 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
既然如此,为什么这不起作用?
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]
在repl.it.上测试
在以下内容中:
a.reduce(function(prev,cur,index,array){
smallest = prev < cur ? prev : cur;
biggest = prev > cur ? prev : cur;
});
提供给reduce的函数没有return语句,因此它返回未定义。因此,在第一次迭代之后,prev被设置为未定义。
如果抽象关系比较算法中的任一表达式未定义,则该表达式返回undefined(请参见步骤3.c),计算结果为false。因此,从第二次迭代开始,最小和最大都设置为cur,最后它们都设置为数组中的最后一个值。
两个问题。
首先,reduce
的lambda参数没有返回值。如果你不打算返回一些东西,reduce
只是forEach
,它有更多的参数,没有任何意义。
其次,在每个元素上,将cur
与prev
进行比较,而不是将cur
与biggest
和smallest
进行比较。
我知道这很古老,但以下是如何使用arrayreduce:解决这些问题
var a = [1,2,3,4,5,1,-1,6,7,8,9,10,2,11];
var minNumber = a.reduce(function(prev,cur) {
return prev < cur ? prev : cur;
}, +Infinity);
var maxNumber = a.reduce(function(prev,cur) {
return prev > cur ? prev : cur;
}, -Infinity);
就我个人而言,我只会使用Math.min/max
:
var a = [1,2,3,4,5,1,-1,6,7,8,9,10,2,11];
Math.min(...a) // will give -1
Math.max(...a) // will give 11
使用reduce时,需要返回reduce内部的内容,否则reduce会忘记以前的值。
var a = [1,2,3,4,5,1,-1,6,7,8,9,10,2,11];
var initial = {
smallest: a[0],
biggest: a[0]
};
var result = a.reduce((prev, cur) => {
prev.smallest = prev.smallest < cur ? prev.smallest : cur;
prev.biggest = prev.biggest > cur ? prev.biggest : cur;
return prev;
}, initial);
console.log(result);
// Prints object as,
// { smallest: -1, biggest: 11 }
相关文章:
- 在Javascript数组中查找绝对最大值
- 按最大值获取数组索引
- RegEx只匹配JSON字符串中最里面的数组
- 获取最接近的数组数
- 删除JS数组中的最小数字
- 将大数组(字符串和类型数组的混合物)存储到blob或文件中/从blob或文件检索大数组的最佳方式
- 查找对象数组是否包含其中一个标记的最快方法
- 选择具有值数组的所有元素的最有效方法
- 如何以最有效的方式实现这个多维数组
- Javascript-如何使用函数找到数组的最小值
- 从数组JavaScript中删除并返回最后n个项的最快方法
- 效率:整数数组的一个子集中两个项之间的最大差值
- 将JS对象数组转换为嵌套形式的最有效方法
- 什么'获取数组的已定义部分的最快方法是什么?JS
- Kadane 的最大子数组算法是否适用于所有正整数数组?
- 什么'这是在二维数组中找到最短数组的最佳方法
- 使用javascript中的reduce函数查找数组的最小和最大数
- 查找数组数组中最长数组的索引
- 最接近数组的价格
- 从多维数组中获取最小-最大数