Javascript 数组反转函数JS
一个初学者的问题。。我需要写一个函数来反转作为函数输入的数组。(我不能使用反向方法) 我想知道为什么会这样:Javascript 数组反转函数JS,javascript,arrays,function,Javascript,Arrays,Function,一个初学者的问题。。我需要写一个函数来反转作为函数输入的数组。(我不能使用反向方法) 我想知道为什么会这样: 函数反转arrayinplace(数组){ for(设i=0;i
函数反转arrayinplace(数组){
for(设i=0;i console.log(reversearlayinplace(arr))
因为数组是通过复制引用传递给函数的,所以不能从函数内部更改外部引用。因为数组是通过复制引用传递给函数的,所以不能从函数内部更改外部引用
arr = arr.slice(0, len);
slice
返回存储在局部变量arr
中的新数组,该数组不会更改b
,它仍然指向整个数组。要改变数组,可以:
arr.splice(len, len);
然后,您必须返回arr
以记录有意义的内容
slice
返回存储在局部变量arr
中的新数组,该数组不会更改b
,它仍然指向整个数组。要改变数组,可以:
arr.splice(len, len);
然后必须
返回arr
以记录有意义的内容。如果要更改输入arr,避免返回,请使用拼接
:
功能反转arrayinplace(arr){
设len=arr.长度;
用于(计数器=0;计数器<2*len;计数器+=2){
arr.unshift(arr[计数器]);
}
arr.拼接(len);
}
VarB=[0,1,2,3,4,5];
反向放置(b);
控制台日志(b)代码>如果要更改输入阵列,避免返回,请使用拼接
:
功能反转arrayinplace(arr){
设len=arr.长度;
用于(计数器=0;计数器<2*len;计数器+=2){
arr.unshift(arr[计数器]);
}
arr.拼接(len);
}
VarB=[0,1,2,3,4,5];
反向放置(b);
控制台日志(b)代码>设置断点并查看数组中的值发生了什么情况。console.log()和断点是您的朋友。您没有从函数返回任何内容。如果您在最后返回arr
,您将看到它是有效的。可能重复@leviderkowitz没有“正确的方法”。“right way”是什么意思?设置一个断点并查看数组中的值发生了什么。console.log()和断点是您的朋友。您不会从函数返回任何内容。如果您在最后返回arr
,您将看到它是有效的。可能重复@leviderkowitz没有“正确的方法”。“正确的方式”是什么意思?@Qurimmo nope,变量是按值传递的。数组是按值传递的对象……其中值是它们的引用。因此,对arr
进行就地修改也会在函数外部对其进行更改,但是arr=/*某些东西*/
不会影响函数外部的数组。是的,这就是我的意思,很抱歉读错了。如果他想更改输入arr,避免返回,使用splice,他可以直接修改它,当然,如果他想执行console.log(reversearlayinplace(b))
方法必须返回它,否则打印的值将始终是未定义的,因为函数不返回anything@quirimmo不,变量是按值传递的。数组是按值传递的对象…其中值是它们的引用。因此,对arr
进行就地修改也会在函数外部对其进行更改,但是arr=/*某些东西*/
不会影响函数外部的数组。是的,这就是我的意思,很抱歉读错了。如果他想更改输入arr,避免返回,使用splice,他可以直接修改它,当然,如果他想执行console.log(reversearlayinplace(b))
该方法必须返回它,否则打印的值将始终是未定义的
,因为该函数不会返回任何内容。该函数在arr
被删除时意外工作。删除arr=
,它仍然可以工作。这是在arr
被删除时意外发生的。删除arr=
,它仍然可以工作。不知道为什么会被否决。这是准确的,并解释了原因。不知道为什么会被否决。这是准确的,并解释了原因。