数组反转函数JS

时间:2018-12-18 14:52:54

标签: javascript arrays function

一个初学者的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 :(得分:2)

如果要更改输入方式,避免返回,请使用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

答案 1 :(得分:0)

由于通过复制引用将数组传递给函数,因此您不能从函数内部更改外部引用。

答案 2 :(得分:0)

   arr = arr.slice(0, len);

slice返回一个新数组,该数组存储在局部变量arr中,并且不会更改b,该变量仍指向整个数组。要更改数组,您可以:

 arr.splice(len, len);

然后必须return arr记录有意义的内容。