Функция реверса массива JS - PullRequest
       2

Функция реверса массива JS

0 голосов
/ 18 декабря 2018

JS вопрос новичка. Мне нужно написать функцию, которая переворачивает массив, который идет как вход функции.(Я не могу использовать метод reverse ).

Интересно, почему это работает:

function reverseArrayInPlace(array) {
  for (let i = 0; i < Math.floor(array.length / 2); i++) {
    let old = array[i];
    array[i] = array[array.length - 1 - i];
    array[array.length - 1 - i] = old;
  }
  return array;
}
let arr = [0, 1, 2, 3, 4, 5];
console.log(reverseArrayInPlace(arr))

Но это так НЕ :

function reverseArrayInPlace(arr) {
  let len = arr.length;
  for (counter = 0; counter < 2 * len; counter += 2) {
    arr.unshift(arr[counter]);
  }
  arr = arr.slice(0, len);
}
let b = [0, 1, 2, 3, 4, 5];
console.log(reverseArrayInPlace(b));

Похоже, arr = arr.slice(0,len); деталь не работает .. Интересно, почему, когда:

b = b.slice(0,6);
[5, 4, 3, 2, 1, 0]

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018
   arr = arr.slice(0, len);

slice возвращает новый массив, который вы храните внутри локальной переменной arr, который не меняет b, который все еще указывает на весь массив.Чтобы изменить массив, вы можете:

 arr.splice(len, len);

, а затем вам нужно return arr, чтобы записать что-то значимое.

0 голосов
/ 18 декабря 2018

Если вы хотите изменить входной массив, избегая возврата, используйте splice:

function reverseArrayInPlace(arr) {
  let len = arr.length;
  for (counter = 0; counter < 2 * len; counter += 2) {
    arr.unshift(arr[counter]);
  }
  arr.splice(len);
}
var b = [0, 1, 2, 3, 4, 5];
reverseArrayInPlace(b);
console.log(b);

РЕДАКТИРОВАТЬ :

Если вы хотите сделать что-то вроде:

console.log(reverseArrayInPlace(b));

ваша функция ДОЛЖНА вернутьсячто-то, иначе печать всегда будет undefined, даже если b был возвращен

0 голосов
/ 18 декабря 2018

Поскольку массив передается в функцию путем копирования ссылки, следовательно, вы не можете изменить внешнюю ссылку изнутри функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...