Получить ключ массива с наибольшим значением в javascript

#javascript #jquery #arrays

#javascript #jquery #массивы

Вопрос:

У меня есть массив, подобный

 arr[1] = 234;
arr[2] = 345;
...

arr[40] = 126;
  

Как я могу получить индекс элемента с наибольшим значением, не повторяя массив?

Комментарии:

1. Нет встроенной операции, которая сделает это. Вам придется написать свою собственную функцию, используя цикл.

Ответ №1:

Вы можете применить Math.max и передать массив в качестве его аргументов-

 arr.indexOf(Math.max.apply(window,arr))
  

Но теперь Math.max выполняет итерацию, точно так же, как это делал бы sort.

Кто-то должен просмотреть каждый элемент в несортированном массиве…

Ответ №2:

С помощью jQuery это так же просто, как:

 // Get the max value from the array    
maxValue = Math.max.apply(this, arr);

// Get the index of the max value, through the built in function inArray
$.inArray(maxValue,arr);
  

Ответ №3:

Если массив не упорядочен, вы не сможете сделать это без итерации.

Ответ №4:

Получить ключ массива с наибольшим значением в javascript

 var cars = ["Saab", "Volvo", "BMW"];
var max_car_result = cars[cars.length-1];
alert(max_car_result);
  

Ответ №5:

Попробуйте это:

 var max_index = -1;
var max_value = Number.MIN_VALUE;
for(var i = 0; i < arr.length; i  )
{
    if(arr[i] > max_value)
    {
        max_value = arr[i];
        max_index = i;
    }
}
  

Ответ №6:

Вы могли бы использовать функцию для установки переменной. И отслеживать максимальное значение в этой функции. Вот краткий пример без проверки типа, тестирования или поддержки удаления значения.

 Array.prototype.maxValue = null;

Array.prototype.setIndex = function(index, value){
  this[index] = value;
  if (value > this.maxValue || this.maxValue == null)
    this.maxValue = value;
}


var arr = new Array();
arr.setIndex(0, 234);
arr.setIndex(1, 500);
arr.setIndex(2, -5);

var maxValue = arr.maxValue;
  

Очевидно, что это удобнее, если вы в данный момент устанавливаете подобные элементы:

 var arr = new Array();
arr[0] = 1;
arr[1] = 500;
arr[2] = 2;
  

Вместо этого:

 var arr = { 1, 500, 2 };
  

Недостатком является то, что он неестественный и требует от вас использования функции для получения правильных результатов.

Комментарии:

1. Хорошее решение, не требующее больших затрат процессора!

Ответ №7:

Сохраняйте массив отсортированным или используйте кучу.

В противном случае выполнить итерацию. Даже если вы нашли какой-то трюк для этого, все равно потребуется выполнить итерацию снизу, так почему бы не выполнить итерацию?

Если это кажется слишком большим количеством кода, поместите его в отдельную процедуру.

Ответ №8:

Два решения: отсортировать по убыванию и получить первый элемент или:

 function bigger(array) {
  if (array.length < 1) {
    return -1;
  }
  bigger = 0;
  for(var i=1; i<array.length;i   ) { 
    if(array[i] > array[bigger]) {
      bigger = i;
    }
  }
  return bigger;
}
  

вы выполняете холодную оптимизацию, используя две переменные, одну для позиции, а другую для содержимого.

Ответ №9:

Либо у вас где-то будет итерация (в вашем коде или в jQuery.each()), либо вы можете определить что-то вроде этого:

 Array.prototype.mpush = function(v)
{
  var maxv = this.maxValue || Number.MIN_VALUE;
  if( v > maxv ) { this.maxValue = v; this.maxIndex = this.length; }
  this.push(v);
}
  

и используйте это arr.mpush(v) для заполнения вашего массива. В этом случае массив будет иметь свойство maxIndex.

Ответ №10:

Это старый вопрос, но вот моя простая эмуляция PHP-скрипта max() , сделанная на javascript:

 function max(array){
    if(Object.prototype.toString.call( array ) === '[object Array]'){
        return array[(array.length-1)];
    }
    else return 0;
}
  

Это возвращает значение последнего ключа в массиве или 0 если ничего не найдено.

Может, кто-нибудь поможет.

Вы можете использовать его как:

 var array = ['bananaman','spiderman','ironman','superman','batman','manman'];
var getLast = max(array);
if(getLast !== 0)
    alert(getLast); // manman