2016-04-01 13 views
1

Dizide yinelemek ve completedtrue'a eşit olan tüm nesneleri silmek için bu kod bloğum var. Bu kod bloğuyla işlev yürüttüğümde, tüm öğeleri silmez. Birini veya bazen yarısını siler, sonra hepsini bir defa yerine silmek için düğmeye birkaç kez basmam gerekiyor. Neden böyle oluyor ve bunu nasıl düzeltebilirim? splice yaptıktan sonra"Arama ve yok etme" yineleme, tüm öğeleri bir kerede silme

var toDoItems = $scope.toDoItems; 
    for (var i = 0; i < toDoItems.length; i++) 
    if (toDoItems[i].completed === true) 
     toDoItems.splice(i, 1) 
    ls.set('toDoData', toDoItems) 
+0

En baştan başlayın ve geriye doğru yineleyin. Bu şekilde liste dizinleriniz, öğelerin kaldırılması nedeniyle değişmez. –

+1

Üzerinde döngü yaparken bir diziden öğeleri silmeye çalışıyorsunuz. Bu henüz gelecek olan liste indekslerini değiştirecek. – AKS

cevap

2

toDoItems.length azalttı ve i sonraki öğe için aynı kalmalıdır beri sayacı azaltmak için i-- yok.

for (var i = 0; i < toDoItems.length; i++) 
{ 
    if (toDoItems[i].completed === true) 
    { 
     toDoItems.splice(i, 1) 
     i--; 
    } 
} 
2

Aklıma gelen diğer alternatif yerine boş bir diziye tamamlanmadı öğeleri itebilir tamamlanan öğeleri kaldırma şudur:

var toDoItems = []; 
for (var i = 0; i < $scope.toDoItems.length; i++) 
    if ($scope.toDoItems[i].completed !== true) 
     toDoItems.push($scope.toDoItems[i]); 
ls.set('toDoData', toDoItems) 

Veya, kullanabilirsiniz Array.prototype.filter():

var toDoItems = $scope.toDoItems.filter(function (item) { 
    return item.completed !== true; 
}); 

ls.set('toDoData', toDoItems) 
+0

Evet, her ikisi de gerçekten iyi çözümler olduğumu kabul ediyorum, ancak başka bir cevap benim özel sorunumun en yakın çözümüydi. Teşekkürler. – Kunok

+1

Evet, sanırım, incele filtre işlevi, öğeleri yeni diziye mi yoksa indisleri düşürmeye mi, yoksa diğer çözümlere göre çok daha temiz olduğunu düşünüyorum. – AKS

+0

Daha temiz ve muhtemelen daha iyi kabul ediyorum, ancak diğer kodlarla sadece 1 satır kod eklemek zorunda kaldım . – Kunok

İlgili konular