获取数组最大值的其他方法

5

我是一个相对新手的JavaScript程序员,正在努力理解ES6语法,特别是if语句。我可以创建简单的ES6函数,例如:

function test(a,c) {
return a+c;
}
[3,8,-4,3].reduce(test);

然而,如果我想添加一个if语句,我无法使用ES6语法 - 例如:

function maxValue(a,c) {
if (c >= a) { a == c }
}
[3,8,-4,3].reduce(maxValue);

我知道可以使用Math方法通过以下代码实现所需结果:
var array = [267, 306, 108];
var largest = Math.max.apply(Math, array); // returns 306

但我想知道如何正确地使用新的ES6语法。我试过在过滤器、缩减、映射和forEach中添加if语句,以实现数组中的最高值,但遇到了困难。

如果有任何帮助、建议或初学者材料的链接,将不胜感激,谢谢。

4个回答

5
你可以使用条件运算符,并检查更大的数字。

const max = (a, b) => a > b ? a : b;

console.log([3, 8, -4, 3].reduce(max));

如果数组只有一个元素,这种方法不起作用。在这种情况下,您可以使用一个非常低的数字作为起始值,并针对给定的值进行检查。

const max = (a, b) => a > b ? a : b;

console.log([3].reduce(max, -Infinity));

如果不想使用循环,你可以使用Math.max展开语法...,它们将数组元素作为调用函数的参数。

console.log(Math.max(...[3, 8, -4, 3]));


5

为了让您的代码正常工作,您需要进行两个更改

  • 就像简单情况一样,您需要确保返回值。因为使用返回值函数返回的值将是undefined,从而导致错误的计算
  • ==用于比较,对于赋值,您需要使用=

function maxValue(a,c) {
    if (c >= a) { a = c }
    return a;
}
console.log([3,8,-4,3].reduce(maxValue));


@user8758206 - 很高兴能帮助你 :) - Nikhil Aggarwal

5
在ES6中,你可以使用解构语法。
Math.max(...array)是ES6版本的Math.max.apply(Math, array)

var array = [267, 306, 108];
var largest = Math.max(...array);
console.log(largest)


2
另一个选项是使用 扩展运算符 结合 Math.max。扩展运算符允许我们将数组的内容展开,作为单独的参数传递。例如:
Math.max(...[1, 10, 2]);

等价于:

Math.max(1, 10, 2);

这里有一个演示示例:

const myArr = [-5, 0, 267, 306, 108, 57, -2352];
console.log(Math.max(...myArr));


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接