函数shift()在循环内部不起作用

时间:2014-01-15 02:57:55

标签: javascript arrays

我正在尝试操作for循环中的数组,我想在数组的末尾添加一个项目并删除数组开头的元素,如下所示:

var internal = new Array();

for(var i = 0; i < 1000; i++) {
    internal[i] = Math.floor(Math.random() * 37);

    internal.shift();
    console.log(internal.length);
}

问题是看起来shift()在循环内部不起作用,事实上,没有元素从数组中删除!

有解决方案吗?

此处JsFiddle

2 个答案:

答案 0 :(得分:2)

每次减少一次,但每次通过访问数组索引访问它都会增长它。而不是

internal[i] = Math.floor(Math.random() * 37);

使用

internal.push(Math.floor(Math.random() * 37));

例如,

var internal = [];
internal[3] = "thefourtheye";
console.log(internal);

<强>输出

[ , , , 'thefourtheye' ]

它为前三个元素创建了空间,并在指定的索引处添加了元素。因此,它将使阵列保持增长。

注意:使用[]创建新数组,而不是new Array()

答案 1 :(得分:1)

因为您使用的是硬编码索引,请尝试

var internal = new Array();

for(var i = 0; i < 1000; i++) {
    internal.push(Math.floor(Math.random() * 37));

    internal.shift();
    console.log(internal.length);
}

演示:Fiddle


//test
var arr = [];
arr[50] = 1;
console.log('arr.length', arr.length);

将打印51而不是1