通过最大值获取数组索引?

4

我找到了一些获取索引最大值的解决方案,但是当我有这样一个数组时,如何获取最大值:

myArray = [];
myArray[1] = 10;
myArray[2] = 99;

alert(Math.max(myArray));

我希望获得最大值的索引。在这种情况下,它是值为99的索引2。 我现在得到的结果是NaN.alert(Math.max(myArray));

你需要一个循环来遍历数组并比较值。https://dev59.com/iU3Sa4cB1Zd3GeqPx8Il - user1054844
1个回答

4

1. 如果你只想得到第一个实例:

var arrayMaxIndex = function(array) {
  return array.indexOf(Math.max.apply(null, array));
};

console.log(arrayMaxIndex([1,2,7,2])); //outputs 2

2. 如果您想要所有最大值的出现次数:

function getAllIndexes(arr, val) {
    var indexes = [], i = -1;
    while ((i = arr.indexOf(val, i+1)) != -1){
        indexes.push(i);
    }
    return indexes;
}

var arrayAllMaxIndexes = function(array){
    return getAllIndexes(array, Math.max.apply(null, array));
}

console.log(arrayAllMaxIndexes([1,2,7,2,7])); // outputs [2,4]

每个人都在更新ES6,这里是我的更新内容:

const arr = [1, 2, 3];
const max = Math.max.apply(Math, arr.map((i) => i));
const maxIndex = arr.indexOf(max);

使用reduce也可以实现同样的功能:

const getMax = (arr) => arr.reduce((acc, item) => (item > acc ? item : acc), arr[0]);

一个小变化是 return array.indexOf(Math.max.apply({}, array)); - Dexygen
在getAllIndexes中的while循环会多次运行arr.indexOf,直到遍历完整个数组。 这里有一个更简单的for循环,可以通过只遍历一次数组来更高效地得到相同的结果: for (let i = 0 ; i < array.length ; i++) { if (array[i] === val) { indexes.push(i); } } - Sámal Rasmussen
如果你想知道 Math.max.apply(null, array) 如何工作的话,可以参考这个链接:https://stackoverflow.com/questions/24541600/how-does-applymath-arrayname-work-javascript - Sámal Rasmussen
如何获取最后一个最大出现索引? - SDK
arr.lastIndexOf(Math.max(...arr)) - makeitmorehuman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接