Сдвиг массива k раз

Левым сдвигом массива мы назывем то действие, во время которого каждый элемент массива одним шагом сдвигается налево, но в массиве каличество элементов остается неизменным. Надо написать функцию, который как параметр получает массив A и возвращает массив, который получится когда мы массив А сдвинем налево k раз. Где k = min[A].

function moveLeft(x) {
  let k = Math.min(...x)
  return x = x.concat(x.splice(0, x.length - k));
}

console.log(moveLeft([2, 3, 7, 8]));
// Должен выводится [7, 8, 2, 3]
console.log(moveLeft([10, 2, 3, 1]));
// Должен выводится [2, 3, 1, 10]
console.log(moveLeft([4, 5, 6, 2, 3, 4]));
// Должен выводится [6, 2, 3, 4, 4, 5]
console.log(moveLeft([5]));
// Должен выводится [5]
console.log(moveLeft([-1, -2, 1, 4]));
// Должен выводится [-2, 1, 4, -1]
console.log(moveLeft([-1, -4, -5]));
// Должен выводится [-1, -4, -5]

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


Ответы (1 шт):

Автор решения: Grundy

Ошибка в неверном параметре для функции splice.

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

function moveLeft(x) {
  let k = Math.min(...x) % x.length;
  return x = x.concat(x.splice(0, k));
}

console.log(moveLeft([2, 3, 7, 8]));
// Должен выводится [7, 8, 2, 3]
console.log(moveLeft([10, 2, 3, 1]));
// Должен выводится [2, 3, 1, 10]
console.log(moveLeft([4, 5, 6, 2, 3, 4]));
// Должен выводится [6, 2, 3, 4, 4, 5]

→ Ссылка