Подтвердить что ты не робот

Получить наименьшее значение из массива в Javascript?

У массива justPrices есть такие значения, как:

[0] = 1.5
[1] = 4.5
[2] = 9.9.

Как вернуть наименьшее значение в массив?

4b9b3361

Ответ 1

Jon Resig проиллюстрировал в этой статье, как это можно было бы достичь, расширив прототип Array и вызвав базовый Math.min, который, к сожалению, не принимает массив, но переменное количество аргументов:

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

а затем:

var minimum = Array.min(array);

Ответ 2

Самый выразительный код для поиска минимального значения - это, вероятно, параметры отдыха:

const arr = [14, 58, 20, 77, 66, 82, 42, 67, 42, 4]
const min = Math.min(...arr)
console.log(min)

Ответ 3

Я считаю, что самый простой способ вернуть наименьшее значение массива - использовать функцию Spread Operator on Math.min().

return Math.min(...justPrices);
//returns 1.5 on example given 

Ответ 4

Обновление: используйте ответ Darin/John Resig, просто имейте в виду, что вам не нужно указывать thisArg для min, поэтому Math.min.apply(null, arr) будет работать нормально.


или вы можете просто сортировать массив и получить значение # 1: [2,6,7,4,1].sort()[0]

[!] Но без предоставления функции сортировки пользовательских номеров это будет работать только в одном очень ограниченном случае: положительные числа менее 10. Посмотрите, как это сломается:

var a = ['', -0.1, -2, -Infinity, Infinity, 0, 0.01, 2, 2.0, 2.01, 11, 1, 1e-10, NaN];

// correct: 
a.sort( function (a,b) { return a === b ? 0 : a < b ? -1: 1} );
//Array [NaN, -Infinity, -2, -0.1, 0, "", 1e-10, 0.01, 1, 2, 2, 2.01, 11, Infinity]

// incorrect:
a.sort();
//Array ["", -0.1, -2, -Infinity, 0, 0.01, 1, 11, 1e-10, 2, 2, 2.01, Infinity, NaN]

И, кроме того, массив изменяется на месте, что может и не быть тем, что вы хотите.

Ответ 5

Представьте, что у вас есть этот массив:

var arr = [1, 2, 3];

Способ ES6:

var min = Math.min(...arr); //min=1

Путь ES5:

var min = Math.min.apply(null, arr); //min=1

Если вы используете D3.js, есть удобная функция, которая делает то же самое, но будет игнорировать значения undefined, а также проверить естественный порядок:

d3.max(массив [, accessor])

Возвращает максимальное значение в заданном массиве с использованием естественного порядка. Если массив пуст, возвращает undefined. Дополнительная функция доступа может быть указано, что эквивалентно вызову array.map(accessor) перед вычислением максимального значения.

В отличие от встроенного Math.max этот метод игнорирует значения undefined; это полезно для игнорирования отсутствующих данных. Кроме того, элементы сравнивались с использованием естественного порядка, а не числового порядка. Например, максимум строк [ "20", "3" ] равен "3", а максимум числа [20, 3] равны 20.

И это исходный код для D3 v4:

export default function(values, valueof) {
  var n = values.length,
      i = -1,
      value,
      max;

  if (valueof == null) {
    while (++i < n) { // Find the first comparable value.
      if ((value = values[i]) != null && value >= value) {
        max = value;
        while (++i < n) { // Compare the remaining values.
          if ((value = values[i]) != null && value > max) {
            max = value;
          }
        }
      }
    }
  }

  else {
    while (++i < n) { // Find the first comparable value.
      if ((value = valueof(values[i], i, values)) != null && value >= value) {
        max = value;
        while (++i < n) { // Compare the remaining values.
          if ((value = valueof(values[i], i, values)) != null && value > max) {
            max = value;
          }
        }
      }
    }
  }

  return max;
}

Ответ 6

ES6 - путь будущего.

arr.reduce((a, b) => Math.min(a, b));

Я предпочитаю эту форму, потому что она легко обобщается для других случаев использования

Ответ 7

Возможно, более простой способ?

Скажем, justPrices смешивается с точки зрения стоимости, поэтому вы не знаете, где наименьшее значение.

justPrices[0] = 4.5
justPrices[1] = 9.9
justPrices[2] = 1.5

Использовать сортировку.

justPrices.sort();

Тогда он должен привести их в порядок. (Может также выполняться в алфавитном порядке.) Затем массив будет помещен в порядке возрастания.

justPrices[0] = 1.5
justPrices[1] = 4.5
justPrices[2] = 9.9

Затем вы можете легко захватить первый индекс.

justPrices[0]

Я считаю, что это немного более полезно, чем то, что было предложено выше, потому что, если вам нужны наименьшие 3 числа в качестве примера? Вы также можете переключить порядок, который они организовали, больше информации на http://www.w3schools.com/jsref/jsref_sort.asp

Ответ 8

var array =[2,3,1,9,8];
var minvalue = array[0]; 
for (var i = 0; i < array.length; i++) {
    if(array[i]<minvalue)
    {
        minvalue = array[i];
    }

}
  console.log(minvalue);

Ответ 9

function smallest(){
  if(arguments[0] instanceof Array)
    arguments = arguments[0];

  return Math.min.apply( Math, arguments );
}
function largest(){
  if(arguments[0] instanceof Array)
    arguments = arguments[0];

  return Math.max.apply( Math, arguments );
}
var min = smallest(10, 11, 12, 13);
var max = largest([10, 11, 12, 13]);

console.log("Smallest: "+ min +", Largest: "+ max);

Ответ 10

Если вы используете Underscore или Lodash, вы можете получить минимальное значение, используя этот простой функциональный конвейер

_.chain([7, 6, -1, 3, 2]).sortBy().first().value()
// -1

У вас также есть функция .min

_.min([7, 6, -1, 3, 2])
// -1

Ответ 11

Я думаю, что у меня есть простое решение для этого, используя только основы javaScript.

function myFunction() {
            var i = 0;
            var smallestNumber = justPrices[0];
            for(i = 0; i < justPrices.length; i++) {
                if(justPrices[i] < smallestNumber) {
                    smallestNumber = justPrices[i];
                }
            }
            return smallestNumber;
        }

Переменная smallestNumber устанавливается в первый элемент justPrices, а цикл for - через массив (я просто предполагаю, что вы знаете, как работает цикл for, если нет, посмотрите его). Если элемент массива меньше текущего smallestNumber (который сначала является первым элементом), он заменит его значение. Когда весь массив прошел цикл, smallestNumber будет содержать наименьшее число в массиве.

Ответ 12

Вот код, который обнаружит самое низкое значение в массиве чисел.

//function for finding smallest value in an array
function arrayMin(array){
    var min = array[0];
    for(var i = 0; i < array.length; i++){
        if(min < array[i]){
            min = min;
        }else if (min > array[i]){
            min = array[i + 1];
        }else if (min == array[i]){
            min = min;
        }
    }
    return min;
};

Назовите это так:

var fooArray = [1,10,5,2];
var foo = arrayMin(fooArray);

(Просто измените второе, else if результат из: min = min в min = array[i] если вы хотите, чтобы числа, которые достигли наименьшего значения, заменили исходное число.)

Ответ 13

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

const findMin = (arr, min, i) => arr.length === i ? min :
  findMin(arr, min = arr[i] < min ? arr[i] : min, ++i)

Фрагмент кода:

const findMin = (arr, min, i) => arr.length === i ? min :
  findMin(arr, min = arr[i] < min ? arr[i] : min, ++i)
  
const arr = [5, 34, 2, 1, 6, 7, 9, 3];
const min = findMin(arr, arr[0], 0)
console.log(min);