Javascript.RU

Min/Max для массивов

Для первого поста не придумал ничего умнее, кроме как перевести коротенький пост любимого всеми Джона Ресига.
http://ejohn.org/blog/fast-javascript-maxmin/

Быстрый Max/Min в JavaScript

Я до сих пор пользовался одним простым, но в то же время очень хорошим приемом. Как быстрее всего найти наибольшее или наименьшее число в массиве?

У этой задачи есть куча решений, включая некоторые очень милые ООП-подходы, использованные в Prototype. Но, как бы то ни было, ни один из них не сравнится с восхитительной простотой этого:

Array.max = function( array ){
    return Math.max.apply( Math, array );
};

Array.min = function( array ){
    return Math.min.apply( Math, array );
};

Суть приема проста и, после первого же взгляда на код, очевидна: любой встроенной функции JavaScript, принимающей произвольное количество аргументов, в качесте оных аргументов можно передать произвольный массив, подставив его в качестве второго аргумента метода .apply() этой вашей функции.

После этого "открытия", я обнаружил, что подобная техника была упомянута в "книге с носорогом", что меня несколько смутило. Ну, в любом случае, это отличный трюк и люди должны знать о нем.

+13

Автор: Гость (не зарегистрирован), дата: 24 мая, 2010 - 16:54
#permalink

Так было бы логичнее:

Array.max = function(){
    return Math.max.apply( Math, this );
};
	 
Array.min = function(){
    return Math.min.apply( Math, this);
};

Автор: Гость (не зарегистрирован), дата: 2 июня, 2010 - 03:31
#permalink

Так работать не будет, неправильный аргумент для applay()
Правильно так:

Array_max = function(){
    return Math.max.apply( Math, arguments[0] );
};
      
Array_min = function(){
    return Math.min.apply( Math, arguments[0] );
};

Или я неправильно пытался применить ваш вариант..)


Автор: exec, дата: 7 июня, 2010 - 15:45
#permalink

Если уж на то пошло, то лучше так:

Array.prototype.max = function () {
return Math.max.apply(Math, this);
}

Автор: MainBuh (не зарегистрирован), дата: 22 июня, 2010 - 16:24
#permalink

Да такой вариант более приемлемый но потом возникают сложности при переборе масива через for in - max будет возвращен как свойство.
А вобще может и не стоит нечего нагромождать, а просто Math.max.apply(null,arr), где arr-массив.


Автор: Гость (не зарегистрирован), дата: 30 сентября, 2011 - 09:57
#permalink

Не нужно перебирать МАССИВ через for in. Уже хотя бы потому, что length тоже будет возвращено как свойство.


Автор: Гость (не зарегистрирован), дата: 3 августа, 2017 - 15:06
#permalink

Object.defineProperty(Array.prototype, 'max', {
value: function () {
return Math.max.apply(null, this);
},
enumerable: false
});


Автор: anton41k, дата: 22 марта, 2015 - 18:18
#permalink

а как найти min в таком массиве:

[1,2,3,56,null,null]

чтобы не выдавал 0.


Автор: Andy83 (не зарегистрирован), дата: 27 мая, 2015 - 17:31
#permalink

Быть может сначала стоит создать новый массив исключив из текущего все null...


Автор: Гость (не зарегистрирован), дата: 21 июля, 2017 - 15:40
#permalink

где-то видел команду которая будет игнорировать пустые места в массиве


Автор: Гость (не зарегистрирован), дата: 9 мая, 2017 - 16:28
#permalink

Добрый день, если у меня есть массив с датами 2017-10-11 к примеру. Дат много . Как мне найти самую маленькую дату?


Автор: Гость (не зарегистрирован), дата: 7 марта, 2018 - 12:16
#permalink

ES2015 -

Math.max(...array)

Автор: Bkmz (не зарегистрирован), дата: 1 июня, 2020 - 13:48
#permalink

Рекомендуется использовать только в случае обработки массивов с небольшим количеством элементов.

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Ob...


Автор: damenoid (не зарегистрирован), дата: 10 июня, 2020 - 16:24
#permalink

почему бы не воспользоваться функцией sort и взять нулевой элемент? При этом можно получить max и min не только числовых значений, но каких угодно, задав функцию сортировки своими правилами.


Автор: Гость (не зарегистрирован), дата: 12 апреля, 2022 - 18:53
#permalink

Автор: Гость (не зарегистрирован), дата: 16 апреля, 2022 - 14:37
#permalink

Отправить комментарий

Приветствуются комментарии:
  • Полезные.
  • Дополняющие прочитанное.
  • Вопросы по прочитанному. Именно по прочитанному, чтобы ответ на него помог другим разобраться в предмете статьи. Другие вопросы могут быть удалены.
    Для остальных вопросов и обсуждений есть форум.
P.S. Лучшее "спасибо" - не комментарий, как все здорово, а рекомендация или ссылка на статью.
Содержание этого поля является приватным и не предназначено к показу.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Разрешены HTML-таги: <strike> <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd> <u> <i> <b> <pre> <img> <abbr> <blockquote> <h1> <h2> <h3> <h4> <h5> <p> <div> <span> <sub> <sup>
  • Строки и параграфы переносятся автоматически.
  • Текстовые смайлы будут заменены на графические.

Подробнее о форматировании

CAPTCHA
Антиспам
3 + 12 =
Введите результат. Например, для 1+3, введите 4.
 
Поиск по сайту
Другие записи этого автора
ixth
Содержание

Учебник javascript

Основные элементы языка

Сундучок с инструментами

Интерфейсы

Все об AJAX

Оптимизация

Разное

Дерево всех статей

Популярные таги
Последние комментарии
Последние темы на форуме
Forum