我已经解决了这个问题。
var arr=[4,10,24,3,2,2,19];
var max = arr[0];
var maxIndex = 0;
var min = arr[0];
var minIndex = 0;
for (var i = 1; i < arr.length; i++) {
if (arr[i] > max) {
maxIndex = i;
max = arr[i];
}
}
for (var i = 1; i < arr.length; i++) {
if (arr[i] < min) {
minIndex = i;
min = arr[i];
}
}
alert(maxIndex);
alert(minIndex);
上面的任务是否有更简单的方法?
答案 0 :(得分:4)
使用reduce
,您可以使用index
和array
参数:
var arr=[4,10,24,3,2,2,19];
var maxIndex = arr.reduce(function(highestIndex, element, index, array){
return element > array[highestIndex] ? index : highestIndex;
}, 0);
最小和最大:
var limits = arr.reduce(function(limits, element, index, array){
limits.max = element > array[limits.max] ? index : limits.max;
limits.min = element < array[limits.min] ? index : limits.min;
return limits;
}, { max : 0, min : 0 });
//limits.max === Highest value index,
//limits.min === Lowest value index
答案 1 :(得分:0)
这是执行此操作的标准方法(无需进行功能编程)。
找到最小值和最大值时,只需将循环的当前索引设置为minIndex / maxIndex变量即可。
function findIndexOfMinMax(arr) {
let minIndex = 0;
let maxIndex = 1;
let min = arr[0];
let max = arr[1];
for (let i = 0; i < arr.length; i++) {
if (arr[i] < min) {
min = arr[i];
minIndex = i;
}
if (arr[i] > max) {
max = arr[i]
maxIndex = i;
}
}
return {
minIndex,
maxIndex
};
}
console.log(findIndexOfMinMax([9, 4, -1, -1, 7, 8, 0, 11]))