Подскажите, как можно упростить базовый случай?
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]));
Нужно сделать рекурсивную функцию, которая находила бы второе минимальное число в массиве. Я сделал, но что-то мне это решение кажется идиотским...