在JavaScript数组中找到最小元素的位置
注* 之前有篇文章介绍过数据遍历的性能比较: for in 比for loop慢至少20倍 ,这是另外一篇比较数组查找性能的例子,通过对手工/indexOf/reduce三者的比较,再次映证,内置函数不一下比手工写的函数快。
今天的小程序甚至不是一个程序。这只是一个函数。
问题陈述如下:
给定一个非空的JavaScript数字数组,找到最小值的索引。(如果最小值出现不止一次,那么任何此类索引是可以接受的。)
1.一个解决方案是进行简单的手动操作,模拟用纸笔如何执行操作:首先,你假设第一个元素是赢家,然后你遍历其他元素。如果你的下一个元素小于第一个元素,那么你声明这个元素是新的临时的赢家。
function indexOfSmallest(a) {
var lowest = 0;
for (var i = 1; i < a.length; i++) {
if (a[i] < a[lowest]) lowest = i;
}
return lowest;
}
2.另一种解决方案是使用reduce内联函数本质来运行循环,所以你只需要提供初始猜测和if语句的业务逻辑。
function indexOfSmallest(a) {
return a.reduce(function(lowest, next, index) {
return next < a[lowest] : index ? lowest; },
0);
}
3.第三个解决方案是使用JavaScript 内联函数找到最小的元素,然后将元素转换为其索引。
function indexOfSmallest(a) {
return a.indexOf(Math.min.apply(Math, a));
}