如何改变传递给函数的数组,而不需要在javascript中迭代它的项

How to change an array passed to a function without iterating through its items in javascript

本文关键字:不需要 javascript 迭代 数组 改变 函数 何改变      更新时间:2023-09-26

我有一个函数,它接受一个数组作为第一个参数。在这个函数中,构造第二个数组。我希望传递的数组被新数组替换。是否有可能改变原始数组,而不改变其项目一个接一个?

var myFunct=function(arr){
   var arr2=[];
   for(var i=0;i<arr.length;i++)
      arr2.push(2 * arr[i]);
   arr=arr2;
}
var arr=[1,2,3];
myFunc(arr);
console.log(arr);
//displays [1,2,3] not the desired [2,4,6];

如果我改变函数,使arr的所有项分别改变,则函数按我想要的方式运行。为什么会这样呢?它是一种方式来改变arr通过简单地分配给新的数组?

//works fine
var myFunct=function(arr){
   var arr2=[];
   for(var i=0;i<arr.length;i++)
      arr2.push(2 * arr[i]);
   //arr=arr2;
   for(var i=0;i<arr.length;i++)
      arr[i]=arr2[i];   
}

您是否需要就地改变?为什么不直接返回新数组呢?

var arr = [1, 2, 3];
function myFunc(a) {
  return a.map(item => item*2);
}
arr = myFunc(arr);
console.log(arr); // [2, 4, 6]


直接回答:不,你不能那样做。函数内的arr是指函数内的局部变量。为了改变函数之外的数组的内容,您需要单独更新其条目。