一个初学者的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]
答案 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
记录有意义的内容。