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;
, []);
另一答案
要达到预期效果,请使用以下选项
- 通过使用地图循环
- 捕获最大索引值
- 过滤掉最大索引值
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返回数组中最高值的所有索引的主要内容,如果未能解决你的问题,请参考以下文章