返回数组中最大值的索引

我有这个:

var arr = [0, 21, 22, 7]; 

将最高值的索引返回到另一个variables的最佳方法是什么?

这可能是最好的方式,因为它是可靠的,可以在旧版浏览器上运行:

 function indexOfMax(arr) { if (arr.length === 0) { return -1; } var max = arr[0]; var maxIndex = 0; for (var i = 1; i < arr.length; i++) { if (arr[i] > max) { maxIndex = i; max = arr[i]; } } return maxIndex; } 

还有这一行:

 var i = arr.indexOf(Math.max(...arr)); 

它执行两次必要的比较,并将在大型数组上引发RangeError 。 我会坚持这个function。

在一行中,可能更快,然后arr.indexOf(Math.max.apply(Math, arr))

 var a = [0, 21, 22, 7]; var indexOfMaxValue = a.reduce((iMax, x, i, arr) => x > arr[iMax] ? i : iMax, 0); document.write("indexOfMaxValue = " + indexOfMaxValue); // prints "indexOfMaxValue = 2" 

除非我错了,否则我会说这是写自己的function。

 function findIndexOfGreatest(array) { var greatest; var indexOfGreatest; for (var i = 0; i < array.length; i++) { if (!greatest || array[i] > greatest) { greatest = array[i]; indexOfGreatest = i; } } return indexOfGreatest; } 

如果你正在使用下划线,你可以使用这个简短的一行:

 _.indexOf(arr, _.max(arr)) 

它将首先查找数组中最大项的值,在这种情况下为22.然后它将返回数组22内的索引,在这种情况下为2。

max使用reduce的另一个解决scheme:

 [1,2,5,0,4].reduce( (a,b,i) => a[0] < b ? [b,i] : a, [Number.MIN_VALUE,-1]) //[5,2] 

如果数组为空,则返回[5e-324,-1]。 如果你只想索引,在[1]之后。

最小通过(切换为>和MAX_VALUE):

 [1,2,5,0,4].reduce( (a,b,i) => a[0] > b ? [b,i] : a, [Number.MAX_VALUE,-1]) //[0, 3] 
 var moutains = [3, 1, 5, 9, 4]; function findHighestMountainIndex(mountainHeights){ var counter = 1; var indexOfHighestMountain = 0; for(counter; counter < mountainHeights.length; counter++){ if(mountainHeights[indexOfHighestMountain] < mountainHeights[counter]){ indexOfHighestMountain = counter; } } return indexOfHighestMountain; } console.log(findHighestMountainIndex(mountains)); 

我更喜欢这种方式。 如果“当前保存的最高索引”小于“正在评估的索引”,则将当前保存的最高索引更改为当前正在评估的索引。 然后进行下一个迭代。 另外,将if-conditional保留为单行是干净的代码。

  var arr=[0,6,7,7,7]; var largest=[0]; //find the largest num; for(var i=0;i<arr.length;i++){ var comp=(arr[i]-largest[0])>0; if(comp){ largest =[]; largest.push(arr[i]); } } alert(largest )//7 //find the index of 'arr' var arrIndex=[]; for(var i=0;i<arr.length;i++){ var comp=arr[i]-largest[0]==0; if(comp){ arrIndex.push(i); } } alert(arrIndex);//[2,3,4] 

这个函数的稳定版本如下所示:

 // not defined for empty array function max_index(elements) { var i = 1; var mi = 0; while (i < elements.length) { if (!(elements[i] < elements[mi])) mi = i; i += 1; } return mi; }