Альтернативным способом решения этой проблемы может быть рекурсия.В этом случае вы можете использовать оператор if
, однако это служит базовым случаем для завершения ваших рекурсивных вызовов.Базовый случай здесь, если K === 0
означает, что нам больше не нужно вращать массив, а затем вернуть массив.Он также имеет другую часть, где мы возвращаем массив, если !A.length
.Это означает, что если массив пуст, также верните текущий массив.
function solution(A, K) {
if(K === 0 || !A.length) return A;
return solution([A.pop(), ...A], K-1);
}
console.log(solution([1, 2, 3, 4], 2)); // [3, 4, 1, 2]
console.log(solution([], 10)); // []
Выше можно переписать как однострочник, если хотите:
const f = (A, K) => K === 0 || !A.length ? A : f([A.pop(), ...A], K-1);
Вы можете визуализировать функцию выше, выполнив следующее (пустьфункция solution
be f
для нашего примера):
f([1, 2, 3, 4], 2) = f([4] + [1, 2, 3], 1) = f([4, 1, 2, 3], 1)
f([4, 1, 2, 3], 1) = f([3, 4, 1, 2], 0) --> [3, 4, 1, 2] // we return the array instead of another function call as K === 0 (our base case)
или когда массив пуст:
f([], 10) = [] // instantly return our array as it is empty. The clause !A.length is true (also part of our base case) which means we return A (our array) instantly.