У меня есть массив в Javascript, мне нужно выполнить цикл для массива, чтобы найти минимальное целое число, результат должен пройти через все значение. Например: [1,2,3,4,5]

Затем мне нужно использовать это целое число для выполнения другой операции в этом массиве. Итак, мне нужно снова выполнить цикл for и сделать что-то вроде: if (i === 1) {// что-то сделать}. Проблема в том, что я не могу сделать это в моем первом цикле, потому что мне нужно пройти через них, прежде чем я продолжу работу.

Итак, вопрос в том, как избежать написания двух циклов вместо одного в javascript?

1
KEN IP 21 Янв 2021 в 00:43

3 ответа

Лучший ответ

Имея в комментариях данные, вы можете уменьшить массив за один цикл и выбрать объект с наименьшим значением key.

Это имеет смысл только для несортированных массивов или когда сортировка неизвестна.

var array = [{ key: "1", value: "apple" }, { key: 2, value: "orange" }, { key: "3", value: "lemon" }],
    min = array.reduce((a, b) => +a.key < +b.key ? a : b);

console.log(min.value);
1
Nina Scholz 20 Янв 2021 в 22:06

Проблема в том, что я не могу сделать это в моем первом цикле, потому что мне нужно пройти через них, прежде чем я продолжу работу.

Вы правы. Невозможно сделать и то, и другое, так как вам нужно пройти через массив;

  • один раз, чтобы подтвердить минимальное значение
  • еще раз, чтобы перебрать каждое минимальное значение

Вот пример, показывающий каждый требуемый цикл и мутацию, где мы устанавливаем все минимальные значения на 0

const getMin = (arr) => Math.min(...arr) // First loop
const mutateArrValues = (arr, value, mutation) => arr.map(ent => {
  if (ent === value) {
    return mutation(ent)
  }
  return ent
}) // Second loop

const exampleArr = [3, 5, 1, 8, 2, 1]

const min = getMin(exampleArr)
const mutatedArr = mutateArrValues(exampleArr, min, (v) => 0)

console.log('min = ', min)
console.log('mutatedArr = ', mutatedArr)
0
Mateusz Siniarski 20 Янв 2021 в 22:33

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

let arr = [
  {
    "key": "1",
    "value": "apple"
  },
  {
    "key": "2",
    "value": "orange"
  },
  {
    "key": "3",
    "value": "lemon"
  }
];

let minObj = arr[0];
for (let i = 1; i < arr.length; i++) {
  if (+minObj.key > +arr[i].key) {
    minObj = arr[i];
  }
}
console.log(minObj);

Конечно, есть множество способов сделать это.

0
MinusFour 20 Янв 2021 в 22:14