如何替换已排序的JS数组中的值?

时间:2017-07-10 11:10:39

标签: javascript angularjs

我有一个按日期排序的数组。在这些数组中,有一个值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>

2 个答案:

答案 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的工作链接,您可以在其中进行解决和实验。