2016-07-01 2 views
0

Я отсортировал данные, поступающие с сервера. Он вызывается из бесконечного свитка.Как проверить повторение данных, поступающих с сервера в цикле?

Я хочу передать данные, которые не являются повторением для клиентского массива. Если начинается дублирование, я хочу вернуться и завершить бесконечный прокрутки.

$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; 
    }); 
    }; 

Моя попытка здесь, чтобы проверить res.data в обратном порядке от первого индекса массива коллекций. Если есть повторение, чтобы затем завершить бесконечную прокрутку/loadMore().

Я продолжаю получать res.data._id не определен, но если я удалю его и просто проведу коллекции [0] vs res.data [j], он немедленно отобразит совпадение, а в console.log отобразится res.data [j] с определенным ._id.

Я уверен, что там что-то очень простое, я здесь отсутствует.

ответ

0

Вы также можете это сделать.

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

все еще получат повторы. Я думаю, что моя первоначальная логика ошибочна. – NoobSter

+0

Это должно сработать. Пожалуйста, предоставьте скрипку. – 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

спасибо, что поймал эту ошибку. Тем не менее, получение дублированных данных. – NoobSter

+0

'if ($ scope.collections.length && res.data) {' что вы пытались проверить на самом деле этой строкой? Думаю, если я понимаю ваш подход, то я могу помочь вам. –

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