2015-02-25 2 views
1

им с помощью Угловых нг-повтор для отображения $scope.currentMessageList массивуArray.splice Внутри ошибки цикла вызывая

я также удалить кнопку, связанную с помощью нг кнопки мыши на функцию удалить, которая выглядит следующим образом:

remove: function() { 
    for (var i = 0; i < 25; i++) { 
     var index = i; 
     $scope.currentMessageList.splice(index, 1); 
     console.log($scope.currentMessageList.length + 'left'); 
    } 
} 

Есть 25 пунктов в этой коллекции, когда я вызываю функцию удалить, я получаю этот выход:

24left 
23left 
22left 
21left 
20left 
19left 
18left 
17left 
16left 
15left 
14left 
13left 
13times X 12left 

Если я заменить цикл с angular.forEach я получаю «12 осталось» только один раз, еще Безразлично `удалить более чем 13 пунктов

Ive также пытались использовать angular.apply, чем я переварить уже в ходе ошибки

+0

Что вы хотите сказать? –

+0

Вы пытаетесь удалить первые 25 предметов? или очистить весь массив? – dfsq

+0

Здесь я пытаюсь удалить 25 предметов, я не понимаю, почему я не могу этого сделать, вот вопрос – inlines88

ответ

0

Выполнение splice во время прохода через массив является плохой идеей.

Вы должны заменить

  for(var i = 0; i < 25; i++){ 
       var index = i; 

       $scope.currentMessageList.splice(index, 1); 
       console.log($scope.currentMessageList.length + 'left');      
      } 

простого

$scope.currentMessageList.splice(0, 25);

+0

Спасибо, стыдно за меня – inlines88

0

You» Повторное удаление элементов при ходьбе массива.

Когда вы достигнете половины массива, вы уже удалили половину предметов, поэтому вы ничего не удаляете.

Вы можете исправить это либо всегда удаляя первый элемент или перебора в обратном порядке от 24 в направлении 0.

0

При удалении элементов массива в цикле, индексы сдвигаются тоже. В результате вы можете перебрать только половину из них. Это проблема здесь.

Если вы хотите очистить 25 первых предметов, вы можете удалить их с помощью метода Array.prototype.shift. В этом случае он будет удалить первый элемент из массива в 25 раз, что дает вам ожидаемый результат:

remove: function() { 
    for (var i = 0; i < 25; i++) { 
     currentMessageList.shift(); 
    } 
} 
0

Вам не нужно перебирать ваш массив, чтобы удалить все элементы. Просто сделайте это:

remove : function(){ 
       $scope.currentMessageList = [];     
     } 

Заканчивать this answer также. Есть и другие способы достижения этого, которые также действительны.

0

При сращивании массива .. длина массива изменяется. Когда вы пытаетесь удалить элемент с индексом 13, длина равна 12. Следовательно, он не удаляется. Вместо сращивания попробуйте shift();