Javascript返回数组中最高值的所有索引

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript返回数组中最高值的所有索引相关的知识,希望对你有一定的参考价值。

我试图让'all'的索引成为数组中的最高值:

[0,1,4,3,4]

因此需要回到[2,4]

更新:感谢大家的快速回复。在阅读了之前的一些评论之后,它为我产生了这条道路:

var array = [0,1,4,3,4];
var indexes = [];
var highest = Math.max(...array);

array.forEach(function(element, i) 
    if (element == highest) 
        indexes.push(i);
    
);

我知道它有点冗长,但对我来说很有意义。我最好读一下'减'。

答案

使用Math.max可以获得最大元素。发布您在数组上映射并获取此max元素的索引。这种方法的复杂性是O(n);

const arr = [0,1,4,3,4];
const max = Math.max(...arr);
const res = [];
arr.forEach((item, index) => item === max ? res.push(index): null);
console.log(res);
另一答案

这里的想法是

  • 首先使用math.max找到最大值
  • 现在遍历数组并添加索引(如果值与max相同)

let arr = [0,1,4,3,4]
let max = Math.max(...arr)

let op = []
for(let i=0; i<arr.length; i++) 
 if(arr[i] === max)
    op.push(i)
  

console.log(op)
另一答案

首先使用reduce查找最大值,然后找到索引:

var arr = [0,1,4,3,4];

var max = arr.reduce((acc,curr) => curr > acc ? curr : acc);
var res = arr.reduce((acc,curr,idx) => curr === max ? [...acc, idx] : acc, []);

console.log(res);
另一答案

这是一个稍微冗长的解决方案,只迭代一次。这个想法是你跟踪你看到的最高价值并与之进行比较。

let arr = [0,1,4,3,4];
let maxValue = arr[0];
let maxIndexes = [];

arr.forEach((val, index) => 
  if(maxValue === val)
    maxIndexes.push(index);
  

  if(maxValue < val)
    maxValue = val;
    maxIndexes = [index];
  
)

console.log(maxIndexes);
另一答案

简单地说,找到最大值

var max_val = Math.max.apply(null, array)

然后使用reduce函数

var max_val_indexes = arr.reduce(function(arr, ele, i) 
    if(ele === max_val)
        arr.push(i);
    return arr;
, []);
另一答案

要达到预期效果,请使用以下选项

  1. 通过使用地图循环
  2. 捕获最大索引值
  3. 过滤掉最大索引值

var arr = [0,1,4,3,4]

const maxIndex = arr
  .map((v, i, self) => v === Math.max(...self) ? i : -1)
  .filter(index => index !== -1);

console.log(maxIndex)
另一答案

没有理由找到最大值然后再循环遍历数组。您可以在遍历数组时跟踪当前的最大值:

let arr =  [0,1,4,3,4]

let maxIndexes = arr.reduce((maxes, n, i, a) => 
    let cur = a[maxes[0]]  // current max value
    if (cur == undefined || n > cur) return [i]
    return (cur == n) ? maxes.concat(i) : maxes
, [])


console.log(maxIndexes)
另一答案

这是一个相当简单的版本。获得最大值后,迭代列表测试每个匹配项,如果它相等则添加索引:

const allMax = (xs, max = Math.max(...xs)) => 
  xs.reduce((all, x, i) => x == max ? [...all, i] : all, [])

console.log(allMax([0, 1, 4, 3, 4]))
另一答案

如果重复的格言是另一个,则可以得到两个数组,而另一个是格言的索引。请检查以下代码,它可能对您有所帮助

let a = [1,3,6,6]
Math.max.apply( Math, a );
let index =[];
let y=0;
let maxValue = a.reduce( function (value,obj)
  if(Math.max.apply( Math, a) == obj)
    	index.push(y);
 		 	value.push(obj);
  
  ++y;
  return value;
,[]);

console.log(maxValue);
console.log(index);

以上是关于Javascript返回数组中最高值的所有索引的主要内容,如果未能解决你的问题,请参考以下文章

如何在递归分治解决方案中自下而上传递原始数组的索引?

使用map方法Javascript遍历数组中的所有数组索引

从过滤方法javascript返回索引值

javascript 返回带有一个更新索引的数组

JavaScript 中常见的搜索算法

JavaScript 中常见的搜索算法