@pashkevich-d

Как узнать индексы трех самых больших значений массива?

Всем привет! Подскажите плиз, как можно получить индексы трех самых больших значений массива? Массив из цифр.
Буду потом по этим индексам брать значения из другого массива и сопоставлять их, так что нужны не значения, а именно индексы. Заранее благодарен.
  • Вопрос задан
  • 824 просмотра
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
const getMaxIndexes = (arr, count) => Object
  .entries(arr.reduce((acc, n, i) => ((acc[n] = acc[n] ?? []).push(i), acc), {}))
  .sort((a, b) => b[0] - a[0])
  .flatMap(n => n[1])
  .slice(0, count);
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
Tim-A-2020
@Tim-A-2020
let sort = [7,6000, 1, 56, 40, 300].sort((a,b) => a - b)
let arrMax = sort.slice(-3);
let indexArr = sort.map((item , i) => arrMax.includes(item) ? i : null).filter(n => n);
console.log(sort[indexArr[2]])
Ответ написан
Комментировать
@dimoff66
Кратко о себе: Я есть
Самое оптимальное по скорости решение без сортировки всего массива

const getTopIndexes = (arr, count) => {
  return arr.reduce((topIndexes, v, i, arr) => {
     let insertIndex = topIndexes.length
     for (let ind = topIndexes.length - 1; ind >= 0; ind --) 
       if (v > arr[topIndexes[ind]]) insertIndex = ind 
       else break
     
     topIndexes.splice(insertIndex, 0, i)
     return topIndexes.slice(0, count)
  }, [])
}
  
console.log(getTopIndexes([-7, 2, 7, 5, 1, 4, -5, 7], 3)) // 2, 7, 3
Ответ написан
Комментировать
const count = 3;
const arr = [ 1, 10000, 0, 500, -50, 300 ];
const maxThreeNumbers = [ ...arr ].sort((a, b) => b - a).slice(0, count);

const result = maxThreeNumbers.reduce((acc, n) => (acc.push(arr.indexOf(n)), acc), []);
console.log(result);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы