我正在编写一个代码,我需要将字符串转换为数组中的数字。我试过了 -
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);
我很好奇为什么第一种方法不起作用,因为根据我应该这样做。任何形式的帮助都会很棒。
答案 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
i = 0
arr.length = 3
index 0
元素,移出第1,推到最后 arr = ["09", "01", 2016]
迭代2
i = 1
arr.length = 3
index 1
元素,移出第1,推到最后 arr = ["01", 2016, 1]
迭代3
i = 2
arr.length = 3
index 2
元素,移出第1,推到最后 arr = [2016, 1, 1]
热潮,你的结果摆在桌面上。
因此,第一个算法非常糟糕。
答案 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"]
,那么第一次迭代i
为0
,您执行arr.push(parseInt(arr[i])); arr.shift()
,结果为:
["09","12", 2016]
和i
会增加到1
,因此在下一步中,您会看到"12"
而不是"09"