Были и другие вопросы по этой проблеме, но я хотел бы знать, почему мой код не отменяет данный массив. Примечание. Я очень новичок в кодировании, просто учась и стараюсь практиковать для личного интереса.reverseArrayInPlace() не работает должным образом
В книге Eloquent Javascript нам предлагается написать две различные функции, которые меняют массив. Первая функция, reverseArray, должна выводить новый массив, который является обратным заданному. Это достаточно легко.
Вторая функция, reverseArrayInPlace, должна изменить данный массив, чтобы он был обратным. Предполагается, что просто использование первой функции, а затем присвоение ее значения первому массиву является «обманом». Кроме того, мы не можем использовать обратный метод.
Вот моя попытка, и я не могу понять, почему он не работает:
var reverseArrayInPlace = function(anArray) {
for (var i = 1; i < anArray.length; i++) {
anArray = anArray.slice(i, i+1).concat
(anArray.slice(0,i)).concat(anArray.slice(i+1));
}
}
Примечание: мне не нравится, как я написал эту функцию, но тем не менее я не могу решить, почему это не работает.
Вот тестовый код в книге и целевой вывод:
var arrayValue = [1, 2, 3, 4, 5];
reverseArrayInPlace(arrayValue);
console.log(arrayValue);
// → [5, 4, 3, 2, 1]
Намек в книге говорит:
"Хитрость заключается в том, чтобы поменять местами первые и последние элементы, затем второй и второй-последний и т. д. Вы можете сделать это, зациклив на половину длины массива (используйте Math.floor для округления вниз - вам не нужно касаться среднего элемента в массиве с помощью нечетная длина) и обменивание элемента в позиции i с единицей в позиции array.length - 1 - i. Вы можете использовать локальную переменную, чтобы ненадолго удерживать одну из элементы, замените это зеркальным изображением, а затем поместите значение из локальной переменной в место, где раньше было зеркальное изображение. "
мне не нравится моя идея, но мне нравится этот намек еще меньше. Есть ли что-то более в духе изменения массива„на месте“с идеей Намек, чем у меня?
Спасибо за . помощь И опять же, мы не можем просто использовать то, что называется .reverse на данном массиве
это тело для цикла одной строки кода? это проблема двойного '.concat concat' от первой линии тела ко второй? –
Вы проверили консоль? (Http://stackoverflow.com/documentation/javascript/185/hello-world/714/using-console-log) В вашем коде имеется ряд ошибок. Но чтобы добраться до корня проблемы, вы не можете просто создать массив чисел (это то, что делают 'slice' и' concat'), если вы хотите изменить существующий массив. –
Каждый вызов '.slice()' будет создавать новый массив. Похоже, это довольно далеко от духа, делающего разворот на месте. – Pointy