其他获得最高阵列价值的方法

时间:2018-11-05 10:35:38

标签: javascript

我对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语法。我试图在过滤器中添加if语句,reduce,map和forEach以达到数组中的最大值并遇到困难。

非常感谢任何帮助,建议或与初学者资料的链接。

4 个答案:

答案 0 :(得分: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.maxspread syntax ...结合使用,它们将数组的元素作为调用函数的参数。

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

答案 1 :(得分:5)

要使代码正常工作,您需要进行2次更改

  • 就像简单的情况一样,您需要确保返回该值。因为with return函数返回的值将为undefined,因此计算不正确
  • ==用于比较,要进行分配,您需要使用=

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

答案 2 :(得分:5)

在ES6中,您可以使用解构语法。
Math.max(...array)等效于Math.max.apply(Math, array)的ES6。

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

答案 3 :(得分:2)

另一个选择-将spread operatorMath.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));