Сдвиг массива 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]