Задать вопрос
@SlideUp

Максимальное число в массиве, как правильнее?

Всем привет.
Есть задачка найти максимальное число в массиве произвольных чисел.
Сделал я так -
var list = [34, 1, 529, -78, 89.7, 1243, 2000, 300000]; 
function maxElement (list){
    let max;
    let min = list[0];
    for(let i = 0; i < list.length; i++){
        if((list[i]) < min){
            min = list[i]; 
        } else {
            max = list[i];
        }
    }
    return max;
}

console.log(maxElement(list));


Работает все ок, но как правильно будет?
1. Присваивать минимальному значению 0.
2. Или присваивать минимальному значению первый елемент массива тобиш list[0].
  • Вопрос задан
  • 35574 просмотра
Подписаться 1 Оценить Комментировать
Решения вопроса 3
sergiks
@sergiks Куратор тега JavaScript
♬♬
Конечно же, второй вариант: list[0].
Доказательство: найти максимум в массиве отрицательных чисел.

А быстрее встроенным методом Math.max():
Math.max.apply(null, list)
Ответ написан
0xD34F
@0xD34F Куратор тега JavaScript
Правильно - отказаться от написания собственных велосипедов и использовать то, что уже есть в языке:

Math.max(...list)

Работает все ок...

Не ок. Попробуйте добавить в конец массива ещё одно значение, меньше текущего максимального и больше или равное минимальному. 1, например. И посмотрите, что вернёт ваша функция. Будете удивлены.

UPD. Если уж писать собственную функцию, то стоит сделать её более универсальной - давайте искать максимум среди любых значений, а не только чисел. И пусть источником этих значений может быть не обязательно массив. Вот как-то так:

function max(data, key = n => n) {
  const getVal = key instanceof Function ? key : n => n[key];
  let result = void 0;

  for (const n of data) {
    const val = getVal(n);
    result = result && result[1] > val ? result : [ n, val ];
  }

  return result && result[0];
}

max([ 12, 9, -47, 83, 22 ]) // 83

max('240815', Number) // '8'

max(document.images, 'width') // не знаю, что выдаст вам, сами посмотрите

max((function*() {
  yield 'aaa';
  yield 'b';
  yield 'cccc';
  yield 'ddd';
})(), n => n.length) // 'cccc'
Ответ написан
profesor08
@profesor08 Куратор тега JavaScript
Еще так:
function max(list) {
  return list.reduce((a, b) => a > b ? a : b);
}


Еще так:
function max(list) {
  let max = list[0];
  list.forEach(function(e) {
    if (e > max) max = e;
  });
  return max;
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Negwereth
@Negwereth
lvivcss.com.ua
А чем обычный sort не походит?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы