我知道地图功能如何工作以及我应该如何使用地图功能。但是在玩猴子代码时,我无法理解移位功能在这里是如何工作的?
var a = [0,1,2,3,4,5,6];
console.log(a);
a.map(function(){
a.shift();
});
console.log(a); // [4,5,6]
我完全感到困惑a
现在如何[4,5,6]?
答案 0 :(得分:5)
结果是[4,5,6]
,这只是因为在这种情况下减少了数组大小并且map函数没有运行7次。让我用ascii图解释:
map contains expected run times after shifted actual run times
--------------------------------------------------------------------------------------
[0,1,2,3,4,5,6] 7 [1,2,3,4,5,6] 1
[1,2,3,4,5,6] 6 [2,3,4,5,6] 2
[2,3,4,5,6] 5 [3,4,5,6] 3
[3,4,5,6] 4 [4,5,6] 4
现在,地图功能预期运行时间是实际运行时间。因此,无需再次运行map函数。
希望,这可以清除幕后的事情。
答案 1 :(得分:3)
我现在完全糊涂了[4,5,6]?
您正在迭代数组,同时从中取出项目。最终,您将耗尽项目以删除不再发生迭代。
只需在代码中添加console
语句
var a = [0,1,2,3,4,5,6];
a.map(function(v, i){
console.log(a)
console.log( a.shift() );
});
console.log(a); // [4,5,6]
您可以观察到它经历了从前面移除项目的4次迭代。
(7)[0,1,2,3,4,5,6] //没有任何班次的第一次迭代
0 //删除第一项
(6)[1,2,3,4,5,6] //在第一次迭代后得到arr
1
(5)[2,3,4,5,6]
2
(4)[3,4,5,6]
3
(3)[4,5,6] // 第4班后得到的数组(因为现在不再有迭代,因为数组中的项数小于4
答案 2 :(得分:-1)
对于.map()的每次迭代,数组的长度都是.shift(),因此在映射时缩短数组,因此第一次迭代时[0]变为1而数组的总长度为1变成了6。
然后你在index [1]上移位(),现在是2,然后是索引[2],现在是4,然后是索引[3],现在是6,所以6被放入索引[2]。 / p>
然后数组的其余部分为空,a为[4,5,6]:)