2016-09-19 6 views
-1

у меня есть, если заявление внутри для цикла, который перебирает весь массив и отображает элементы:Удаление последнего элемента массива, удаление всего массива

for (var i = 0; i < txtA.length; i++) { 
    txtA[i].update(); 
    txtA[i].show(); 

    if (txtA[i].y == height) { 
     txtA.pop(); 
     console.log(txtA.length); 
    } 
} 

Условный оператор проверяет высоту элементов по сравнению с холстом и удаляет элемент. Проблема в том, что все элементы массива удаляются, когда оператор if равен true. ПОМОГИТЕ!

+1

Можем ли мы также увидеть массив, с которым вы работаете? –

+0

Вы уверены, что у массива было более одного элемента? – Carcigenicate

+0

Массив содержит несколько конструкторов объектов, с x, y, letter, update() и show(); – RomanK

ответ

1

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

Использование сращивания вместо

txtA.splice(i, 1);

+0

спасибо, что сработало – RomanK

0

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

Это, как говорится, Array.prototype.pop является не ответственным за поведение, которое вы описываете. От MDN:

Метод поп удаляет последний элемент из массива и возвращает этот значение для вызывающего абонента ... Если вы звоните поп() на пустой массив, она возвращает не определено.

I.e. pop удаляет последний элемент из массива или (в случае пустого массива) ничего не делает и возвращает undefined; он никогда не удаляет массив. Если это очистка Массив, то он должен удалить один элемент за раз, выбирая один элемент из конца массива на каждой итерации.