数组 justPrices 具有如下值:
[0] = 1.5
[1] = 4.5
[2] = 9.9.
如何返回数组中的最小值?
数组 justPrices 具有如下值:
[0] = 1.5
[1] = 4.5
[2] = 9.9.
如何返回数组中的最小值?
找到最小值的最简洁的表达代码可能是rest 参数:
const arr = [14, 58, 20, 77, 66, 82, 42, 67, 42, 4]
const min = Math.min(...arr)
console.log(min)
Function.prototype.apply
当您不需要更改函数的上下文时,Rest 参数本质上是一种方便的简写:
var arr = [14, 58, 20, 77, 66, 82, 42, 67, 42, 4]
var min = Math.min.apply(Math, arr)
console.log(min)
这也是一个很好的用例Array.prototype.reduce
:
const arr = [14, 58, 20, 77, 66, 82, 42, 67, 42, 4]
const min = arr.reduce((a, b) => Math.min(a, b))
console.log(min)
Math.min
直接传递给可能很诱人reduce
,但是回调会接收额外的参数:
callback (accumulator, currentValue, currentIndex, array)
在这种特殊情况下,它可能有点冗长。reduce
当您有一组复杂的数据要聚合成单个值时,这尤其有用:
const arr = [{name: 'Location 1', distance: 14}, {name: 'Location 2', distance: 58}, {name: 'Location 3', distance: 20}, {name: 'Location 4', distance: 77}, {name: 'Location 5', distance: 66}, {name: 'Location 6', distance: 82}, {name: 'Location 7', distance: 42}, {name: 'Location 8', distance: 67}, {name: 'Location 9', distance: 42}, {name: 'Location 10', distance: 4}]
const closest = arr.reduce(
(acc, loc) =>
acc.distance < loc.distance
? acc
: loc
)
console.log(closest)
当然,您始终可以使用经典迭代:
var arr,
i,
l,
min
arr = [14, 58, 20, 77, 66, 82, 42, 67, 42, 4]
min = Number.POSITIVE_INFINITY
for (i = 0, l = arr.length; i < l; i++) {
min = Math.min(min, arr[i])
}
console.log(min)
...但即使是经典的迭代也可以进行现代改造:
const arr = [14, 58, 20, 77, 66, 82, 42, 67, 42, 4]
let min = Number.POSITIVE_INFINITY
for (const value of arr) {
min = Math.min(min, value)
}
console.log(min)
我发现返回数组最小值的最简单方法是在 Math.min() 函数上使用扩展运算符。
return Math.min(...justPrices);
//returns 1.5 on example given
MDN 上的页面有助于更好地理解它:https : //developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min
一点额外:这也适用于 Math.max() 函数
返回 Math.max(...justPrices); //在给定的示例中返回 9.9。
希望这可以帮助!
更新:使用 Darin 的 / John Resig 答案,请记住,您不需要为 指定 thisArg min
,因此Math.min.apply(null, arr)
会正常工作。
或者您可以对数组进行排序并获得值 #1:
[2,6,7,4,1].sort()[0]
[!] 但如果不提供自定义数字排序功能,这只适用于一种非常有限的情况:小于 10 的正数。看看它会如何破裂:
var a = ['', -0.1, -2, -Infinity, Infinity, 0, 0.01, 2, 2.0, 2.01, 11, 1, 1e-10, NaN];
// correct:
a.sort( function (a,b) { return a === b ? 0 : a < b ? -1: 1} );
//Array [NaN, -Infinity, -2, -0.1, 0, "", 1e-10, 0.01, 1, 2, 2, 2.01, 11, Infinity]
// incorrect:
a.sort();
//Array ["", -0.1, -2, -Infinity, 0, 0.01, 1, 11, 1e-10, 2, 2, 2.01, Infinity, NaN]
而且,array 就地更改,这可能不是您想要的。
ES6 是未来之路。
arr.reduce((a, b) => Math.min(a, b));
我更喜欢这种形式,因为它很容易推广到其他用例