gpt4 book ai didi

javascript - 为什么仅在第一个函数后才更改数组值?

转载 作者:行者123 更新时间:2023-12-03 07:18:10 25 4
gpt4 key购买 nike

我有一个反转数组的函数:

function reverseArray(array) {
for(let i = 0; i <= Math.floor(array.length / 2); i++) {
let old = array[array.length - 1 - i];
array[array.length - 1 - i] = array[i];
array[i] = old;
}
return array;
}

和一个创建局部作用域数组并以相反顺序推送值的函数:

function reverseArr(arr) {
let output = [];
for(let i of arr) {
output.unshift(i);
}
arr = output;
return arr;
}

假设有一个元素:

let arrayValue = [1, 2, 3, 4, 5];

如果我以 arrayValue 作为参数调用第一个函数,则 arrayValue 被更改:

reverseArray(arrayValue); // [5, 4, 3, 2, 1]
console.log(arrayValue); // [5, 4, 3, 2, 1]

但是,如果我用 arrayValue 调用第二个函数:

reverseArr(arrayValue); //[5, 4, 3, 2, 1]
console.log(arrayValue); //[1, 2, 3, 4, 5]

即使我在返回前将反转的值分配给参数,arrayValue 也不会改变:

arr = output;

谁能解释一下为什么?

提前致谢。

最佳答案

基本上你需要一个新数组

let output = [];

然后您将新数组分配给参数 arr

arr = output;

现在您有两个对象引用,一个是外部作用域的 arr,另一个是 output

为了克服这个问题,您需要保留array 的对象引用。要在现有数组中获取新内容,您可以清空数组并推送新数组的值。

arr.length = 0;
arr.push(...output);

关于javascript - 为什么仅在第一个函数后才更改数组值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64826637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com