Показать сообщение отдельно
  #1 (permalink)  
Старый 22.03.2024, 18:54
Аспирант
Отправить личное сообщение для firep91613 Посмотреть профиль Найти все сообщения от firep91613
 
Регистрация: 24.10.2023
Сообщений: 58

Упростить код
Подскажите, как можно упростить базовый случай?
function secondMin(arr, min1 = Infinity, min2 = Infinity) {
	if (arr.length == 1) {
		/*if (arr[0] < min1) {
			min2 = min1;
			min1 = arr[0];
			return min2
		}

		if (arr[0] < min2) {
			min2 = arr[0];
			return min2;
		}

		return min2;*/

		switch (true) {
			case arr[0] < min1:
				min2 = min1;
				min1 = arr[0];
				break;
			case arr[0] < min2:
				min2 = arr[0];
				break;
		}

		return min2;
	}

	if (arr[0] < min1) {
		min2 = min1;
		min1 = arr[0];
		return secondMin(arr.slice(1), min1, min2);
	} else if (arr[0] < min2 && arr[0] > min1) {
		min2 = arr[0];
		return secondMin(arr.slice(1), min1, min2);
	} else {
		return secondMin(arr.slice(1), min1, min2);
	}
}

// [3, 1, 2];
// [1, 4, 2, 9, -1];
// [2, 1, 3, 4];
// [2, 1, 0, 3];
alert(secondMin([3, 1, 2]));

Нужно сделать рекурсивную функцию, которая находила бы второе минимальное число в массиве. Я сделал, но что-то мне это решение кажется идиотским...
Ответить с цитированием