提问人:이규빈 提问时间:6/30/2023 最后编辑:Michael M.이규빈 更新时间:6/30/2023 访问量:24
在我制作的“_reduce”函数中,拼接数组被分配给原始数组,但没有改变,为什么?
In "_reduce" function i made, spliced array is allocated to original array, but is not changed, why?
问:
function _each(list, iter){
for(var i=0; i<list.length; i++){
iter(list[i]);
}
}
这是列表电路的代码
var slice = Array.prototype.slice;
function _rest(list, num){
return slice.call(list, num || 1);
}
我不仅想将其应用于数组,还想将其应用于类似数组的对象。所以我使用 slice.call
function _reduce(list, iter, memo){
if(arguments.length == 2){
memo = list[0];
list = _rest(list);
}
_each(list, function(val){
memo = iter(val, memo);
})
return memo;
}
这是“_reduce”功能。如果我不放置备注参数,则将 _rest(list) 分配给列表。
var arr = [1, 2, 3, 4];
console.log(_reduce(arr, function(a, b){return a + b}));
console.log(arr);
10 test.js:79 (4) [1, 2, 3, 4]
这是结果,我想知道为什么 arr 没有改变?我期望 (3) [2, 3, 4]
答:
0赞
Samathingamajig
6/30/2023
#1
Array.prototype.slice
返回应用了相应切片的原始数据的副本。
当你说 时,你正在将局部变量重新分配给除第一个值之外的所有内容的切片。您不会修改原始数组,因为对象(非基元)是通过引用传递的,并且您正在将该引用替换为另一个引用。list = _rest(list);
list
如果你想修改原来的,你需要使用 ,它删除了原始数组上的第一个元素,然后你不需要重新分配,你只需要调用它。Array.prototype.shift()
.shift()
评论
0赞
이규빈
6/30/2023
哦,谢谢你的回答!我理解
评论