javascript返回数组中最小值和最大值的索引

时间:2016-02-04 13:23:20

标签: javascript

我已经解决了这个问题。

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);

上面的任务是否有更简单的方法?

2 个答案:

答案 0 :(得分:4)

使用reduce,您可以使用indexarray参数:

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]))