我有一个按日期排序的数组。在这些数组中,有一个值date
,这个日期是我的HTML视图中的标题。有时我可以使用具有相同date
值的多个数组,这是我不想要的。
我想要做的是,直接在集合中查找并替换相同的date
值。或者在我的HTML视图中添加一个AngularJS参数,只运行一次相同的日期值(例如,如果是例如......)。
基本思路是在一个唯一的日期标题下对具有相同日期的“用户”进行分组。
我尝试了这个,但仍然没有成功:
//Arr is fill up in this function and sort by date after, it is a $scope Array. snapshot is from a firebase request and contains all values needed to fill up Arr. This deleDouble() function is called in a loop. Just right after there is a sort() function.
$scope.deleteDouble = function(Arr, snapshot)
{
var tmp = Arr;
// Algo 1 : infinite loop
for(var i = 0; i < tmp.length; i++)
{
if(tmp.indexOf(snapshot.date) === -1)
{
console.log("IF DATE ALREADY EXISTS");
$scope.Arr.push({date : '', name : snapshot.name, adress : snapshot.adress});
}
else if(tmp.indexOf(snapshot.date) > -1)
{
console.log("IF DATE FIRST TIME");
$scope.Arr.push({date : snapshot.date, name : snapshot.name, adress : snapshot.adress});
}
}
}
// Algo 2 : is not working
tmp.reduce(function(acc, el, i, arr)
{
if (arr.indexOf(el) !== i && acc.indexOf(el) < 0)
console.log("IF DATE ALREADY EXISTS");
$scope.Arr.push({date : '', name : snapshot.name, adress : snapshot.adress});
else{
console.log("IF DATE FIRST TIME");
$scope.Arr.push({date : snapshot.date, name : snapshot.name, adress : snapshot.adress});
}
}, []);
// Algo 3 : same result : nothing !
tmp.reduce(function(dupes, val, i)
{
if (tmp.indexOf(val) !== i && dupes.indexOf(val) === -1)
{
console.log("IF DATE ALREADY EXISTS");
$scope.Arr.push({date : '', name : snapshot.name, adress : snapshot.adress});
}
else
{
console.log("IF DATE FIRST TIME");
$scope.Arr.push({date : snapshot.date, name : snapshot.name, adress : snapshot.adress});
}
}, []);
<div ng-repeat="u in users">
<h3 style="color:#2C33BE;">{{u.date}}</h3>
<ion-item>
<div class="item-u">{{u.name}}</div>
<div class="item-u">{{u.adress}}</div>
</ion-item>
</div>
答案 0 :(得分:2)
uniqueDateSet = {};
tmp = Arr.filter(function(elem, idx, arr){
if(elem.date in uniqueDateSet){
return false;
}else{
uniqueDateSet[elem.date]='';
return true;
}});
答案 1 :(得分:1)
您可以使用唯一过滤器来使用特定值的唯一性。
只需包含图书馆
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular-filter/0.5.8/angular-filter.min.js"></script>
然后将模块包含在app
模块
var app = angular.module('plunker', ['ui.filters']);
然后您的HTML将
<div ng-repeat="u in users | unique: 'date'">
<h3 style="color:#2C33BE;">{{u.date}}</h3>
<ion-item>
<div class="item-u">{{u.name}}</div>
<div class="item-u">{{u.adress}}</div>
</ion-item>
</div>
以下是PLUNKR的工作链接,您可以在其中进行解决和实验。