为什么用push将数组移位到最后一个元素?

时间:2016-07-03 07:13:58

标签: javascript

我正在编写一个代码,我需要将字符串转换为数组中的数字。我试过了 -

 for(var i=0;i<arr.length;i++)
{
   arr.push(parseInt(arr[i]));
   arr.shift();
}

对我来说最奇怪的是返回的值是正确的但在数组的末尾,最后一个和最后一个元素的值总是相同(即最后一个元素的预期值),虽然这完全没问题 -

l= arr.length;  
for(var i=0;i<l;i++){
arr.push(parseInt(arr[i]));
}
var temp=begin.splice(0,l);

我很好奇为什么第一种方法不起作用,因为根据我应该这样做。任何形式的帮助都会很棒。

3 个答案:

答案 0 :(得分:1)

让数组arr = ["2016","09","01"]

现在让我们逐步移动循环(您可以使用chrome debuggger工具轻松完成)

var arr = ["2016","09","01"]
for(var i = 0; i < arr.length; i++) {
  arr.push(parseInt(arr[i]))
  arr.shift()
}

console.log(arr)

迭代1

  1. i = 0
  2. arr.length = 3
  3. index 0元素,移出第1,推到最后
  4. arr = ["09", "01", 2016]
  5. 迭代2

    1. i = 1
    2. arr.length = 3
    3. index 1元素,移出第1,推到最后
    4. arr = ["01", 2016, 1]
    5. 迭代3

      1. i = 2
      2. arr.length = 3
      3. index 2元素,移出第1,推到最后
      4. arr = [2016, 1, 1]
      5. 热潮,你的结果摆在桌面上。

        因此,第一个算法非常糟糕。

答案 1 :(得分:1)

您的第一个功能是在1次迭代中同时读取和删除数组元素。请参考fail fast array。

干运行:

&#39; 1&#39;&#39 2&#39;是初始数组。

第一次迭代后,它将是&#39; 2&#39;,1

现在第二次迭代有i = 1

但是ar [1] = 1,所以它将再次推1,最终数组为1,1。

希望你明白这一点。

更好的解决方案: 使用JavaScript地图。

var newAr=ar.map(function(a){ return parseInt(a); });

答案 2 :(得分:0)

您更改了输入数组和您从输入中读取的索引(i)。

假设您拥有["2016","09","12"],那么第一次迭代i0,您执行arr.push(parseInt(arr[i])); arr.shift(),结果为:

["09","12", 2016]i会增加到1,因此在下一步中,您会看到"12"而不是"09"