刚碰到问题以及解决办法的思路:
后端返回的数组变成类似[{1,1},{1,1},{2,2},{2,2},{3,3},{3,3}.....]
每条数据后面都跟前面一条一模一样。
现在我们要过滤掉每重复的数据只留一条。结果:[{1,1},{2,2},{3,3}....]
$scope.filterRepeatArray = function(datas){
var data = [];
//过滤重复数组
if(datas[0]){
data.push(datas[0]);
}
for (var i = 1; i < datas.length; i++) {
var indexs = i-1;
if(datas[i].attendanceDate != datas[indexs].attendanceDate){
data.push(datas[i]);
}
}
return $scope.changeRefresh(data);
}
datas参数是传进来有问题的数组。前提我们要先判断这个数据是否有值,然后才进这个方法。我们默认把第一个数组push到空的新数组中,然后再通过for遍历,定义初始遍历开始的下标是1。
然后再判断当前遍历的下标对象跟前一个下标数组对象比较里面的值是否相等,如果不相等说明是没重复的。然后继续push到新数组中。
在这里有个要注意的地方:相比较的两个数组一定是当前遍历的下标对象跟之前的下标对象(i-1)。不能跟后面一个(i+1)下标对象对比。因为后面一个我们不能确定是否还有数据,数组也不允许我们提前比较还没遍历到的下标对象。
这样做可能有些硬编码。主要记住一点:当前遍历的下标只能跟已遍历过的比较。这样就算不是连续重复的,这要把当前遍历的下标对象跟新数组for遍历的每个对象比较就可以解决了。
如果有更好的解决办法欢迎共享。