Math min javascript
Найти элемент min/max массива в JavaScript
618 HankH [2009-11-03 21:18:00]
Как я могу легко получить элемент min или max массива JavaScript?
42 ответа
Как насчет расширения встроенного объекта Array для использования Math.max / Math.min :
Вот JSFiddle.
Увеличение встроенных вложений может вызвать конфликты с другими библиотеками (некоторые видят), поэтому вам может быть удобнее всего с помощью apply ‘ing Math.xxx() непосредственно в ваш массив:
В качестве альтернативы, если ваш браузер поддерживает ECMAScript 6, вы можете использовать оператор распространения, который работает аналогично методу apply :
321 newspire [2011-05-23 23:01:00]
Для больших массивов (
10⁷ элементов) Math.min и Math.max обе приводят к ошибке в Node.js.
RangeError: превышен максимальный размер стека вызовов
Более надежное решение состоит в том, чтобы не добавлять каждый элемент в стек вызовов, а вместо этого передавать массив:
Если вас беспокоит скорость, следующий код
3 раза быстрее, чем Math.max.apply на моем компьютере. См. http://jsperf.com/min-and-max-in-array/2.
Если ваши массивы содержат строки вместо чисел, вам также необходимо принудить их к числам. Этот код делает это, но он замедляет код до
Использование оператора распространения (ES6)
Если вы параноик, как я, об использовании Math.max.apply (что может привести к ошибкам при выдаче больших массивов в соответствии с MDN), попробуйте это
Анонимные функции, к сожалению, необходимы (вместо использования Math.max.bind(Math) , потому что reduce не просто передает a и b в свою функцию, но также i и ссылку на сам массив, поэтому мы должны обеспечить, чтобы мы не пытались называть max на них.
54 totymedli [2015-06-15 00:22:00]
Официальная Math.max() документация MDN
Следующая функция использует Function.prototype.apply(), чтобы найти максимальный элемент в числовом массиве. getMaxOfArray([1, 2, 3]) эквивалентен Math.max(1, 2, 3) , но вы можете использовать getMaxOfArray() для программно сконструированных массивов любого размера.
Или с помощью нового оператора распространения, получение максимума массива становится намного проще.
36 Gajus [2014-12-18 04:38:00]
.apply часто используется, когда намерение состоит в том, чтобы вызвать переменную функцию со списком значений аргументов, например.
Функция Math.max([value1[,value2, . ]]) возвращает наибольшее число из нуля или более.
Метод Math.max() не позволяет передавать массив. Если у вас есть список значений, которые необходимо получить самому большому, вы обычно вызываете эту функцию с помощью Function.prototype.apply(), например.
Однако, с ECMAScript 6 вы можете использовать оператор распространения:
Оператор спрединга позволяет расширять выражение в местах, где ожидаются множественные аргументы (для вызовов функций) или несколько элементов (для литералов массива).
Используя оператор спреда, вышесказанное можно переписать как таковое:
При вызове функции с использованием вариационного оператора вы можете даже добавить дополнительные значения, например.
Bonus:
Оператор Spread позволяет использовать синтаксис литерала массива для создания новых массивов в ситуациях, когда в ES5 вам нужно будет вернуться к императивному коду, используя комбинацию push , splice и т.д.
22 inkedmn [2009-11-03 21:35:00]
Вы делаете это, расширяя тип массива:
Повышен с здесь (от Джона Ресига)
Простое решение, чтобы найти минимальное значение по сравнению с Array элементов является использование Array прототипа функции reduce :
или используя встроенную функцию Math.Min() JavaScript (спасибо @Tenflex):
Это устанавливает min в A[0] , а затем проверяет наличие A[1]. A[n] , строго ли оно меньше текущего min . Если A[i] то min обновляется до A[i] , возвращая это значение.
Два способа короче и проще:
Другие уже дали некоторые решения, в которых они дополняют Array.prototype . Все, что я хочу в этом ответе, это выяснить, должно ли оно быть Math.min.apply( Math, array ) или Math.min.apply( null, array ) . Итак, какой контекст должен использоваться, Math или null ?
При передаче null в качестве контекста в apply контекст по умолчанию будет глобальным объектом (объект window в случае браузеров). Передача объекта Math в качестве контекста будет правильным решением, но это не повредит при прохождении null . Здесь пример, когда null может вызвать проблемы при декорировании функции Math.max :
Вышеизложенное исключает исключение, поскольку this.foo будет оцениваться как window.foo , которое равно undefined . Если мы заменим null на Math , все будет работать так, как ожидалось, и строка «foo» будет напечатана на экране (я тестировал это с помощью Mozilla Rhino).
Вы можете в значительной степени предположить, что никто не украсил Math.max , поэтому передача null будет работать без проблем.
14 sbr [2012-09-26 21:43:00]
Еще один способ сделать это:
это сработало для меня.
Я удивлен, что не упоминается функция уменьшения.
9 Peter [2012-01-24 15:43:00]
Для больших массивов (
10⁷ элементов) Math.min и Math.max выводит RangeError (Максимальный размер стека вызовов) в node.js.
Для больших массивов быстрое и грязное решение:
Вы можете использовать следующую функцию в любом месте вашего проекта:
И тогда вы можете вызвать функции, передающие массив:
У меня была та же проблема, мне нужно было получить минимальное и максимальное значения массива, и, к моему удивлению, встроенных функций для массивов не было. Прочитав много, я решил самостоятельно протестировать «лучшие 3» решения:
- дискретное решение: цикл FOR для проверки каждого элемента массива на текущее значение max и/или min;
- Решение APPLY: отправка массива в внутренние функции Math.max и/или Math.min с использованием apply (null, array);
- Решение REDUCE: рекурсия проверки на каждый элемент массива с использованием функции сокращения().
Массив A был заполнен 100 000 случайными целыми числами, каждая функция была выполнена 10 000 раз в Mozilla Firefox 28.0 на настольном компьютере Intel Pentium 4 2.99GHz с Windows Vista. Время в секундах, полученное функцией performance.now(). Результатом этого было три цифры и стандартное отклонение:
- Дискретное решение: среднее = 0.161s, sd = 0.078
- APPLY solution: mean = 3.571s, sd = 0.487
- Решение REDUCE: среднее value = 0,350 с, sd = 0,044
Решение REDUCE было на 117% медленнее, чем дискретное решение. Решение APPLY было хуже, на 2,118% медленнее, чем дискретное решение. Кроме того, как заметил Петр, он не работает для больших массивов (около более 1 000 000 элементов).
Кроме того, чтобы завершить тесты, я протестировал этот расширенный дискретный код:
Время: среднее value = 0,218 с, sd = 0,094
Таким образом, он на 35% медленнее, чем простое дискретное решение, но он извлекает как максимальное, так и минимальное значения сразу (любое другое решение займет как минимум вдвое больше, чем для их получения). После того, как OP понадобится оба значения, дискретное решение будет лучшим выбором (даже если две отдельные функции, одна для вычисления максимума и другая для вычисления минимума, они превзойдут второе лучшее решение REDUCE).
Математические функции и операторы в JavaScript
Сборка арифметических операторов и методов чисел в JavaScript. Всё что связано с математикой в JavaScript с примерами функций, собрано вместе на одной странице
Я часто пишу на JavaScript и в последнее время я часто именно на нём пишу всякие штуки для сайтов.
А больше всего я пишу на JavaScript разные онлайн калькуляторы для сайтов.
Поэтому для себя пишу шпаргалочку, где буду собирать все функции и операторы, которые участвуют в арифметических расчётах.
Арифметические функции и операторы в JavaScript
+ — сложение; — — вычитание; / — деление; * — умножение; % — остаток от деления.
parseInt — читает из строки целое число
parseFloat — читает из строки дроби
# Проверка на число
Проверку типа данных на число можно сделать при помощи функции isNaN() , которая определяет является ли литерал или переменная нечисловым значением:
поэтому чтобы проверить значение на то является ли оно числом, перед isNaN ставят восклицательный знак ! , котоый является логическим оператором НЕ (неравно, неправда):
Ещё один способ определить является ли значение числом — это использовать оператор typeof , который возвращает строку указывающую тип операнда:
# Объект Math
Объект Math является встроенным объектом в язык JavaScript. Он хранит в своих свойствах и методах различные математические константы и функции. При этом объект Math не является функциональным объектом.
Math.ceil() — Округляет вверх
Math.floor() — Округляет вниз
Math.round() — Округляет до ближайшего целого
Math.trunc() — отрезает дробную часть и получается целое число. Например: Math.trunc(14,318) вернёт результат 14 . Метод не округляет, а просто откидывает дробную часть.
.toFixed(2) — округляет число до 2 знаков. Цифра указывает сколько знаков оставлять после запятой.
Math.max() — возвращает самое большое число. Пример: Math.max(2, 73, 14, 47) вернёт 73.
Math.min() — возвращает наименьшее из чисел.
# Работа со степенями
Math.sqrt() — Корень квадратный
Math.cbrt() — Корень кубический
Math.pow(num, st) — Возвести число в степень.
- num — число которое возвести в степень,
- st — степень в которую возвести число.
# Операторы сравнения
>= — больше или равно; — меньше или равно
== — равно; != — не равно
Тригонометрия
Math.sin(x) — возвращает числовое значение от -1 до 1, которое представляет синус переданного (в радианах) угла
Math.cos() — возвращает косинус числа
Math.tan() — возвращает тангенс числа
Math.acos() — возвращает арккосинус числа
Math.asin() — возвращает арксинус числа
Math.atan() — возвращает арктангенс числа в радианах
Math.atan2() — возвращает арктангенс от частного своих аргументов
# Рандомное число (случайное число)
Math.random() — Возвращает случайное число в диапазоне от 0 до 1.
Функция для генерации целых случайных чисел:
Функция вовращает случайное целое число между min (включительно) и max (не включая max)
Как на самом деле работают Javascript Math.max и Math.min?
Мне действительно интересно, как эти функции на самом деле работают? Я знаю, что есть много вопросов о том, как их использовать, я уже знаю, как их использовать, но я нигде не мог найти, как на самом деле реализовать эту функциональность на массиве, например, если бы таких функций не было? Как бы вы кодировали такую функцию, если бы не было помощников?
6 Ответов
Вот код Math.max в двигателе Chrome V8.
Давайте взглянем на спецификации (которые могут / должны помочь вам в реализации!)
В первом издании ECMAScript (ECMA-262) (первоначальные определения для обоих Math.max/min) мы видим следующее:
Более поздние версии спецификации дают нам:
Ниже показано, как реализовать функции, если Math.min() и Math.max() не существует.
Функции имеют объект arguments , который можно перебирать, чтобы получить его значения.
Важно отметить, что Math.min() без аргументов возвращает Infinity , а Math.max() без аргументов возвращает -Infinity .
Базовая функциональность:
Math.max() и Math.min() используются для чисел (или того, что они могут принудить к числам), вы не можете напрямую передать массив в качестве параметра.
Вы можете иметь ряд чисел, разделенных запятыми.
Матрицы:
Этот пример показывает, как можно применить их к массивам:
В основном следующие работы:
Почему это работает?
Это работает, потому что apply-это функция, которая имеет все функции, которая применяет функцию с аргументами массива.
Math.max.apply(null, [1,5,2,3]) совпадает с Math.max(1,5,2,3)
Ну, вот min без Math.min (код в ЕС6).
Та же логика может быть реализована с помощью простого цикла. Вам просто нужно будет отслеживать одну из переменных через итерацию, которая является самым низким значением, которое вы видели до сих пор. Начальное значение minSoFar будет равно Infinity . Причина в том , что любое число, кроме Infinity , меньше Infinity , но в случае отсутствия аргументов мы хотим вернуть сам Infinity , потому что это то, что оценивает Math.min() без аргументов.
Max может быть реализован с почти такой же логикой, только вы отслеживаете самое высокое значение, которое вы видели до сих пор, и начальное значение- -Infinity .
Это легко реализовать с помощью Array.prototype.reduce :
Похожие вопросы:
Я понимаю, что все математические функции в java встроены. Но мне было интересно из любопытства, как на самом деле работает Math.min() ? Я проверил документацию java и не смог найти ничего, что.
Каков самый быстрый и простой способ получить минимальное (или максимальное) значение между двумя датами? Существует ли эквивалент Math.Min (& Math.Max) для дат? Я хочу сделать что-то вроде: if.
В visual basic при попытке найти самые большие и самые маленькие значения в списке более эффективно использовать math.min/max следующим образом: Dim highest As Decimal = Decimal.MinValue Dim lowest.
Есть формула, которую я прочитал на stackoverflow, и мне не ясно одно, подробнее об этом ниже. maxMax возвращает второе значение в скобках, а mathMin-первое. Итак, предположим, что я делаю расчет.
Я пытаюсь понять, почему Math.max и Math.min не работают. Я знаю, что мог бы использовать и если бы еще высказывание, если бы я тоже захотел, но есть ли способ сделать это без if else? Scanner Scan.
Когда я ввожу массив в параметр функций javascript math minimum и maximum, он возвращает правильное значение: console.log( Math.min( 5 ) ); // 5 console.log( Math.max( 2 ) ); // 2 var array = [3, 6.
При передаче значений функции Math.max или Math.min в JavaScript они возвращают самые высокие и самые низкие значения из входных данных соответственно. Однако, если вводится фрагмент данных, который.
(это java) в моем методе, я вычисляю 7 баллов, данные мне в файле. Я должен установить Макс и мин, инициализировать их, то есть, где у меня возникли проблемы. Кроме того, я должен использовать.
Я хочу найти максимальное и минимальное значения в целочисленном массиве, но я не могу их использовать . Eclipse выдает эту ошибку Метод min (int, int) в типе Math не применим для аргументы (int[]).
Math в JavaScript
Всем доброго времени суток. На связи Алексей Гулынин. В прошлой статье вы узнали, что такое Array в Javascript. В данной статье я бы хотел рассказать об объекте Math в Javascript. В языке Javascript, как и во всех других языках программирования, существуют математические операции. Для работы с этими операциями используется объект Math в Javascript . У данного объекта есть методы (функции) и свойства. Как всегда, все методы будем рассматривать на примерах. Начнем с вывода наиболее встречаемых в математике констант: числа «PI» и числа «E» :
В данном случае мы увидим чему равны данные константы. Для того, чтобы не нагромождать статью повторяющимся кодом, буду писать сюда только то, что нужно будет вставить между тегами .
Случайное число можно задать с помощью метода Math.random() . Причем число задаётся в диапазоне от 0 до 1. Давайте с вами выведем случайное число от 0 до 10:
В данном случае будет выведено число с плавающей точкой. Допустим мы хотим, чтобы число было целое.
Для этого используется другой метод — Math.round() . Он округляет согласно стандартным правилам округления (если меньше 0,5 — округление в сторону меньшего числа, если >= 0,5 — округление в сторону большего числа):
В данном случае вы увидите, что округление идёт по всем правилам.
Если мы хотим принудительно округлить до меньшего числа (кто-то говорит «отбросить дробную часть»), то необходимо использовать метод Math.floor() :
Метод Math.ceil() округляет до большего:
Метод Math.pow() используется для того, чтобы возвести число в степень. В качестве первого параметра указывается само число, в качестве второго параметра — степень числа. Давайте на примерах посмотрим результат выполнения данного метода:
Давайте подумаем, почему «2 в (-1)» степени это 0.5. С точки зрения работы с дробями «2 в (-1)» это 1/2 = 0.5. Думаю, с остальными примерами вопросов не должно быть.
Метод Math.max() возвращает наибольшее число из чисел, указанных в методе. Если в скобках ничего не указывать, то будет возращено -Infinity (бесконечность):
Метод Math.min() возвращает наименьшее число из чисел, указанных в методе. Если в скобках ничего не указывать, то будет возращено Infinity (беконечность):
Метод Math.sqrt() — это корень квадратный из данного числа, указанного в скобках. Возвращает число, квадрат которого равен числу в скобках. Вроде всё просто, а как-то мудрено написал (ну да ладно). Если передать в качестве параметра отрицательное число, то будет возращено NaN . Пример:
Чуть не забыл один из основных метод — Math.abs() , который возвращает модуль числа. Кто забыл, что такое модуль числа, напоминаю:
Модуль действительного числа — это абсолютная величина этого числа. Попросту говоря, при взятии модуля нужно отбросить от числа его знак.
Сразу пример:
Метод Math.exp(x) возвращает e в степени x, где e=2.71827. Любое число в нулевой степени есть единица. Давайте проверим это:
Метод Math.log(x) возвращает натуральный логарифм числа. Давайте попробуем передать квадрат константы E:
Возникает вопрос: если есть функция натурального логарифма, то почему нет, к примеру, функции десятичного логарифма (lg(100) = 2). Давайте реализуем данную функцию, используя натуральный логарифм. Из школьной математики loga(b) = ln(b)/ ln(a). Тогда получается, что lg(100) = ln(100) / ln(10):
Также существует возможность работы с тригонометрическими функциями. Описывать их все не буду, просто приведу пример:
В качестве домашнего задания разберите все примеры из данной статьи.
В данной статье вы узнали, как работать с объектом Math в Javascript.
На связи был Алексей Гулынин, оставляйте свои комментарии, увидимся в следующих статьях.
JS: Math
Math is the value of the property key «Math» of the global object. [JS: the Global Object]
Type of Math is object.
Parent
Parent of Math is Object.prototype . [see JS: Prototype and Inheritance]
Purpose
Purpose of Math object is to provide a namespace for all math functions and math constants.
The Math object is a “special” object. It is similar in concept to Java’s static class. You don’t create Math object to use it. You use it directly, for its property as math constants, and its methods as math functions.
Properties
Value Properties
- Math.E
- Math.LN10
- Math.LN2
- Math.LOG10E
- Math.LOG2E
- Math.PI
- Math.SQRT1_2
- Math.SQRT2
- Math [ Symbol.toStringTag ] (ES2015)
Function Properties
- Math.ceil
- Math.floor
- Math.round
- Math.fround (ES2015)
- Math.trunc (ES2015)
exponential and logarithm
- Math.exp
- Math.expm1 (ES2015)
- Math.log
- Math.log1p (ES2015)
- Math.log10 (ES2015)
- Math.log2 (ES2015)
- Math.sin
- Math.cos
- Math.tan
- Math.asin
- Math.acos
- Math.atan
- Math.atan2
- Math.hypot (ES2015)
- Math.sinh (ES2015)
- Math.cosh (ES2015)
- Math.tanh (ES2015)
- Math.asinh (ES2015)
- Math.acosh (ES2015)
- Math.atanh (ES2015)
Value Properties
Math.PI → π. Value is ≈ 3.1415
Math.E в†’ Constant e. The number Limit[(1+1/n)^n,
Math.LN10 → natural log of 10. Value is ≈ 2.3025
Math.LN2 → natural log of 2. Value is ≈ 0.6931
Math.LOG10E → base-10 log of e. Value is ≈ 0.4342
Math.LOG2E → base-2 log of e. Value is ≈ 1.4426
Math.SQRT1_2 → 1/√2 . Value is ≈ 0.7071
Math.SQRT2 → √2 . Value is ≈ 1.4142
Math [ Symbol.toStringTag ] в†’ value is the string «Math» .
Methods
Common
Math.max(…) → Returns the largest of the arguments. [see JS: Get Max/Min Value of Array]
Math.min(…) → Returns the smallest of the arguments. [see JS: Get Max/Min Value of Array]
Math.random() в†’ Return a real number between 0 to 1, including 0 but excluding 1.
Math.sign( x ) в†’ Returns 1 if x is positive, -1 if negative, 0 if positive 0, -0 if negative 0. (JavaScript’s 0 can are signed. -0 === 0 eval to true .)
Math.abs( x ) в†’ Absolute value.
Ceiling, Floor, Round
Math.ceil( x ) в†’ Return a integer that’s equal or greater than x .
Math.floor( x ) в†’ Return a integer that’s equal or less than x .
Math.round( x ) в†’ Return a number to the nearest integer. 0.5 rounds up to 1.
Math.fround( x ) в†’ Returns the nearest 32bits representation of x .
Math.trunc( x ) в†’ Returns the integral part of x .
Power and Roots
Math.pow( x , y ) в†’ x raised to the power of y . Same as x ** y .
Math.sqrt( x ) в†’ Square root.
Math.cbrt( x ) в†’ Cube root.
To compute nth root, use Math.pow(x, 1/n) .
Exponential and Logarithm
Math.exp( x ) в†’ e raised to the power of x . Same as e ** x .
Math.expm1( x ) в†’ Same as e ** x -1 . The result is computed in a way that is accurate even when the value of x is close 0.
Math.log( x ) в†’ Natural log of x
Math.log10( x ) в†’ Base 10 log of x
Math.log1p( x ) в†’ Natural log of x +1
Math.log2( x ) в†’ Base 2 log of x
Math.sin( x ) в†’ Sine function.
Math.cos( x ) в†’ Cosine function.
Math.tan( x ) в†’ Tangent function.
Math.asin( x ) в†’ Inverse of sine. Domain is -1 to 1. Range is 0 to ПЂ.
Math.acos( x ) в†’ Inverse of cosine. Domain is -1 to 1. Range is 0 to ПЂ.
Math.atan( x ) в†’ Inverse of tangent. No restriction on domain. Range is -ПЂ/2 to ПЂ/2 .
Math.atan2( y , x ) в†’ Returns the arc tangent of the quotient y / x , where the signs of y and x are used to determine the quadrant of the result. Result is in range from в€’ПЂ to +ПЂ.
Math.hypot( a , b , c etc ) → Returns the square root of a ^2 + b ^2 + c ^2 … . This is useful to compute the length of a vector [a,b,c] in linear algebra.
All trig functions’s argument are radians.
- To convert degree d to radians, do: d *Math.PI/180
- To convert degree r to degrees, do: r *180/Math.PI
Hyperbolic Functions
Math.sinh( x ) в†’ Hyperbolic sine. That is (e^x — e^(-x))/2
Math.cosh( x ) в†’ hyperbolic cosine. That is (e^x + e^(-x))/2
Math.tanh( x ) в†’ Hyperbolic tangent. That is Sinh[x]/Cosh[x]
Math.asinh( x ) в†’ Inverse hyperbolic sine.
Math.acosh( x ) в†’ Inverse hyperbolic cosine.
Math.atanh( x ) в†’ Inverse hyperbolic tangent.
Math.clz32( x ) в†’ Returns the number of leading zero bits in the 32-bit binary representation of x .
Math.imul( a , b ) в†’ multiplies a and b as though they were 32 bit signed integers.
If you have a question, put $5 at patreon and message me.