我想处理传递给函数的数组,同时保持原始数组不变。这是一个简单的问题示例。
function whyDoesArrChange(arr) {
var newArr = arr;
newArr.push(4);
return arr;
}
console.log(whyDoesArrChange([1,2,3]));
// OUT: [1,2,3,4]
我只想更改 newArr
,但 arr
(来自参数)也返回推送的值(返回 [1,2, 3,4]
)。我怎样才能避免这种情况?
最佳答案
将数组传递给函数时,该数组的值是一个引用,您必须克隆它以破坏引用。
有多种方法可以实现这一点:
1 - 使用 .slice();
var newArr = arr.slice();
2 - 使用 .concat
var newArr = arr.concat([]);
3 - 使用 JSON.parse & JSON.stringify
var newArr = JSON.parse(JSON.stringify(arr));
您可以在 jsperf 中查看更多方法并查看它们的性能。我找到了。
关于javascript - 如何在不更改原始参数数组的情况下操作传递给函数的 JavaScript 数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43727295/