如何在JavaScript中获取数组中的最小元素?

7

这是我尝试过的:

Math.min([1,2,3])

但只获得NaN...

6个回答

10

使用 apply

Math.min.apply(null,[1,2,3]); //=> 1

来自devguru:

Function.apply(thisArg[, argArray]) 方法允许你调用一个函数并指定关键字 this 在函数内的上下文中所引用的对象。thisArg 参数应该是一个对象。在被调用的函数上下文中,this 将会引用 thisArg。apply 方法的第二个参数是一个数组,该数组的元素将作为被调用的函数的参数传递。argArray 参数既可以是数组字面量,也可以是函数的废弃 arguments 属性。

在这种情况下,第一个参数不重要(因此为 null),而第二个参数很重要,因为该数组作为参数传递给了 Math.min。这就是此处使用的 '技巧'。

[编辑于2020年11月] 这个答案相当老了。现在(使用 Es20xx)您可以使用扩展语法将一个数组展开为 Math.min 的参数。

Math.min(...[1,2,3]);

3
使用JS扩展运算符可以避免额外的编码:
console.log(Math.min(...[1,2,3]))

2

您需要遍历数组。据我所知,JS中没有array_min函数。

var i, min = arr[0];
for (i=1; i<arr.length; i++)
    min = Math.min(min, arr[i]);

1
Math.min(1, 2, 3)
1

由于 [1,2,3] 无法转换为数字,因此返回 NaN

更多信息:Mozilla 参考文献


1

0
不要传递一个数组(在这种情况下,它是非数字或NaN),只需将数字作为函数的参数传递。像这样:
Math.min(1, 2, 3)

@编译,然后使用类似vbence建议的东西。 - N 1.1
@compile-fan:你为什么要这样做呢?该函数期望的是数字作为参数,而不是数组。如果你必须将一个数组传递给一个函数,那么我想你可以编写一个包装器来处理Math.min(),它接受一个数组并在调用Math.min()之前将其拆分为数组元素。(甚至检查输入以确保它们都是数字。) - David

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