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

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

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

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

19 ответов

Решение

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

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

а потом:

var minimum = Array.min(array);

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

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


Параметры отдыха являются по существу удобным сокращением для Function.prototype.apply когда вам не нужно менять контекст функции:

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


Это также отличный пример использования Array.prototype.reduce:

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

Это может быть заманчиво, чтобы пройти Math.min прямо к reduce Однако обратный вызов получает дополнительные параметры:

callback (accumulator, currentValue, currentIndex, array)

В этом конкретном случае это может быть немного многословно. reduce особенно полезно, когда у вас есть набор сложных данных, которые вы хотите объединить в одно значение:

const arr = [{name: 'Location 1', distance: 14}, {name: 'Location 2', distance: 58}, {name: 'Location 3', distance: 20}, {name: 'Location 4', distance: 77}, {name: 'Location 5', distance: 66}, {name: 'Location 6', distance: 82}, {name: 'Location 7', distance: 42}, {name: 'Location 8', distance: 67}, {name: 'Location 9', distance: 42}, {name: 'Location 10', distance: 4}]
const closest = arr.reduce(
  (acc, loc) =>
    acc.distance < loc.distance
      ? acc
      : loc
)
console.log(closest)


И, конечно, вы всегда можете использовать классическую итерацию:

var arr,
  i,
  l,
  min

arr = [14, 58, 20, 77, 66, 82, 42, 67, 42, 4]
min = Number.POSITIVE_INFINITY
for (i = 0, l = arr.length; i < l; i++) {
  min = Math.min(min, arr[i])
}
console.log(min)

... но даже классическая итерация может сделать современный макияж:

const arr = [14, 58, 20, 77, 66, 82, 42, 67, 42, 4]
let min = Number.POSITIVE_INFINITY
for (const value of arr) {
  min = Math.min(min, value)
}
console.log(min)

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

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

Страница на MDN помогает лучше понять ее: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/min

Немного дополнительно: это также работает с функцией Math.max()

return Math.max(...justPrices); // возвращает 9.9 в данном примере.

Надеюсь это поможет!

Обновление: используйте ответ Дарина / Джона Резига, имейте в виду, что вам не нужно указывать 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]

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

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

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, есть удобная функция, которая делает то же самое, но игнорирует неопределенные значения, а также проверяет естественный порядок:

d3.max (массив [, метод доступа])

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

В отличие от встроенного Math.max, этот метод игнорирует неопределенные значения; это полезно для игнорирования отсутствующих данных. Кроме того, элементы сравниваются с использованием естественного порядка, а не числового порядка. Например, максимум строк ["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;
}

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

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

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

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);

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

Предположим, что 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

Вы можете использовать метод min в объекте Math!

      const abc = [50, 35, -25, -6, 91]; 
    
function findMin(args) {   
    return Math.min(...args); 
} 
    
console.log(findMin(abc));

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);

Вот вариант ответа Дарина Димитрова, который не меняет Array опытный образец:

const applyToArray = (func, array) => func.apply(Math, array)

applyToArray(Math.min, [1,2,3,4]) // 1
applyToArray(Math.max, [1,2,3,4]) // 4

Супер-простой способ найти наименьшее значение:

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

Чтобы вызвать функцию, просто используйте имя массива и добавьте .min ()

function tinyFriends() {
    let myFriends = ["Mukit", "Ali", "Umor", "sabbir"]
    let smallestFridend = myFriends[0];
    for (i = 0; i < myFriends.length; i++) {
        if (myFriends[i] < smallestFridend) {
            smallestFridend = myFriends[i];
        }
    }
    return smallestFridend   
}

Без какой-либо готовой функции вы можете сделать это следующим образом:

вот функция, которая принимает массив и возвращает наименьшее значение из массива.

      function findSmallest(passedArray){
    let smallestNumber = passedArray[0];
    passedArray.forEach((a, i) => {
        if(passedArray[i+1] < smallestNumber){
            smallestNumber = passedArray[i+1];
        }else{
            smallestNumber;
        }
    });
    return smallestNumber;
}

Или вы можете сделать это легко с помощьюMathфункция

      let a = Math.min(5, 10);
let b = Math.min(0, 150, 30, 20, 38);
let c = Math.min(-5, 10);
let d = Math.min(-5, -10);
let e = Math.min(1.5, 2.5);

Результат:

      5
0
-5
-10
1.5

Я думаю, что у меня есть простое для понимания решение для этого, используя только основы 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 будет содержать наименьшее число в массиве.

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

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);

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

//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] если вы хотите, чтобы числа, которые достигли наименьшего значения, заменили исходное число.)

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

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

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

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

Для всех, кому это нужно, у меня просто чувство.(Получите наименьшее число с несколькими значениями в массиве) Благодаря ответу Akexis.

если у вас есть, скажем, массив Distance, ID и ETA в минутах Итак, вы нажимаете, возможно, цикл for или что-то в этом роде

      Distances.push([1.3, 1, 2]); // Array inside an array.

А затем, когда он закончится, сделайте сортировку

      Distances.sort();

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

      Distances[0] // The closest distance or the smallest number of distance. (array).
Другие вопросы по тегам