#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