2016-07-01 2 views
0

Ich habe Daten vom Server sortiert. Es wird von einer unendlichen Schriftrolle aufgerufen.Wie überprüft man in der for-Schleife, ob Daten vom Server kommen?

Ich möchte Daten, die keine Wiederholung zu einem clientseitigen Array ist. Wenn die Duplizierung beginnt, möchte ich die unendliche Bildlauffunktion zurückgeben und beenden.

$scope.collections = []; 

$scope.isBusy = false; 

$scope.queryObject = { 
    size: 12, 
    sorter: 'timestamp', 
    sort: { 
     timestamp: -1 
    }, 
    skip: 0 
    } 

$scope.loadMore = function() { 
    if ($scope.isBusy == true) { 
     return; 
    } 

    $scope.isBusy = true; 

    Collect.all($scope.queryObject).then(function(res) { 


     for (var i = 0; i < res.data.length; i++) { 
     if ($scope.collections.length && res.data) { 
      for (var j = res.data.length - 1; j >= 0; j--) { 
      if ($scope.collections[0]._id == res.data[j]._id) { 
       console.log('match', res.data[j]) 
       return; 
      } 
      } 
      $scope.collections.push(res.data[i]) 
     } 
     else{ 
     $scope.collections.push(res.data[i]) 
     } 
     } 

     $scope.queryObject.skip += 12; 
     $scope.isBusy = false; 
    }); 
    }; 

hier Mein Versuch ist res.data in umgekehrter Reihenfolge an den ersten Index der Sammlungen Array zu überprüfen. Wenn es eine Wiederholung gibt, endet das endlose Scroll/loadMore().

Ich bekomme immer res.data._id ist nicht definiert, aber wenn ich es entfernen und nur Sammlungen überprüfen [0] vs res.data [j] zeigt es sofort eine Übereinstimmung, und die console.log zeigt res.data [j] mit einer definierten ._id.

Ich bin mir da sicher etwas Grundlegendes vermisse ich hier.

Antwort

0

Sie könnten dies auch tun.

var dummyArray = []; 
for (var i = 0; i < res.data.length; i++) { 
    if(dummyArray.indexOf(res.data[i]._id === -1) { 
     $scope.collections.push(res.data[i]); 
     dummyArray.push(res.data[i]._id); 
    } 
    else { 
     break; 
    } 
} 
+0

wird immer noch wiederholt. Ich denke, meine ursprüngliche Logik ist fehlerhaft. – NoobSter

+0

Dies sollte funktionieren. Bitte gib eine Geige. – lintu

0
for (var i = 0; i < res.data.length; i++) { 
     if ($scope.collections.length && res.data) { 
      for (var j = res.data.length; j >= 0; j--) { //modify this line to j = res.data.length - 1; 
      if ($scope.collections[0]._id == res.data[j]._id) { 
       console.log('match', res.data[j]) 
       return; 
      } 
      } 
      $scope.collections.push(res.data[i]) 
     } 
     else{ 
     $scope.collections.push(res.data[i]) 
     } 
     } 
+0

danke für das Auffangen dieses Fehlers. Immer noch duplizierte Daten. – NoobSter

+0

'if ($ scope.collections.length && res.data) {' Was haben Sie eigentlich versucht, diese Zeile zu überprüfen? Ich denke, wenn ich Ihre Annäherung klar verstehe, dann kann ich Ihnen vielleicht helfen. –

Verwandte Themen