метод массива выявляющий минимальное число кроме отрицательных чисел js

Рейтинг: 0Ответов: 2Опубликовано: 05.02.2023

Необходимо вывести минимальное, не отрицательное число массива. В данном случае цифру 1.

Плюсом будет еще и вывести индекс под которым находятся минимальные значения.

При этом индекс массива должен начинаться не с "0" а с "1". Короче вывести минимальное число ${number}, под ${index}.

const arr = [8, 1, 1, 3, 2, -1, 5]

Как в этом случае лучше поступить?

Было бы не плохо, чтобы этот код был еще и лаконичным.

Ответы

▲ 2

Один из вариантов. Вернет первый минимальный элемент

const arr = [8, -2, 1, 1, 3, 2, -1, 5];

function minNum(data) {
  let min = Infinity;
  let idx = -1;
  data.forEach((item, index) => {
    if (item > 0 && min > item) {
      min = item;
      idx = index;
    }
  })
  return [min, idx + 1];
}

const minimum = minNum(arr);
console.log(`${minimum[0]}, под ${minimum[1]}`)

Такой же, но немного оптимизированный вариант. Как только будет найден минимальный номер(1 в нашем случае), цикл прекратит работу и вернет результат.

const arr = [8, -2, 1, 1, 3, 2, -1, 5];

function minFor(data) {
  let min = Infinity;
  let idx = -1;
  for (let i = 0; i < data.length; i++) {
    if (data[i] > 0 && min > data[i]) {
      min = data[i];
      idx = i;
      if (min === 1) return [min, idx + 1];
    }
  }
}

const minimum3 = minFor(arr);
console.log(`${minimum3[0]}, под ${minimum3[1]}`)

▲ 1

Было бы не плохо, чтобы этот код был еще и лаконичным.

Ну не знаю... Достаточно лаконично?

const arr = [8, 1, 1, 3, 2, -1, 5]

const o = arr.reduce((o, v, i) => v < 0? o: v < o.v? {v, i: ++i}: o, {v: Infinity, i: null}) 
const txt = `${o.v}, под ${o.i}`
console.log(txt)