如何在for循环中检查来自服务器的重复数据?

时间:2016-07-01 05:20:31

标签: javascript angularjs

我已经对来自服务器的数据进行了排序。它是从无限卷轴调用的。

我想将不重复的数据推送到客户端阵列。如果重复开始,我想返回并结束无限滚动。

$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。

我确信这里有一些非常基本的东西。

2 个答案:

答案 0 :(得分: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])
        }
      }

答案 1 :(得分:0)

你也可以这样做。

userDbHelper = new UserDbHelper(getApplicationContext());
sqLiteDatabase = userDbHelper.getReadableDatabase();
Cursor cursor = userDbHelper.searchDetails(name,productCode, sqLiteDatabase);