移位功能如何在以下代码中起作用?

时间:2017-10-27 10:22:46

标签: javascript

我知道地图功能如何工作以及我应该如何使用地图功能。但是在玩猴子代码时,我无法理解移位功能在这里是如何工作的?

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]?

3 个答案:

答案 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]:)