2014-01-15 3 views
0

Я пытаюсь манипулировать массивом внутри цикла for, где я хочу добавить элемент в конец массива и удалить элемент в начале массива, как это:Функция shift() не работает внутри цикла

var internal = new Array(); 

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

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

проблема заключается в том, что она выглядит как сдвиг() не работает в цикле, на самом деле, ни один элемент не удаляется из массива!

Есть ли решение?

Здесь JsFiddle

ответ

2

Он каждый раз уменьшается на единицу, но вы каждый раз увеличиваете его, обращаясь к нему с доступом к массиву. Вместо того, чтобы

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

использования

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

Например,

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

Выход

[ , , , 'thefourtheye' ] 

Это сделало пространство для первых трех Eleme nts и добавил элемент в указанном указателе. Таким образом, он будет поддерживать рост массива.

Примечание: Используйте [], чтобы создать новый массив, вместо new Array()

+0

Большое спасибо! – Lughino

+0

@Lughino Добро пожаловать :) – thefourtheye

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

Смежные вопросы