2016-09-20 4 views
0

Мне недавно понадобился какой-то индивидуальный ретранслятор, который группирует данные по их ключу, но не просто группирует их все вместе, поэтому я читаю несколько ссылок и вещей, ... и, наконец, я придумал копию группиЙ из этой статьи, в которой он, кажется, чтобы закончить его в лучшем случае, ... http://sobrepere.com/blog/2014/10/14/creating-groupby-filter-angularjs/ И тогда я настроен так, что стало так:Infdig in Custom groupBy

вещей моей группой по делать ... это:

группы данные Вместе, пока он не достигнет различий. , но дело в том, что, хотя он работает, он все еще генерирует infdig, я знаю, что это потому, что дайджест сделал вызов другого, но то, что я не знаю, - как решить его очень легко и понятно, так как я новый на JavaScript ...

 app.filter('groupBy', function() { 
      var results = {}; 
      return function (data, key) { //Data => My Objects Array - Key => Name Of Filtered Property 
       if (!(data && key)) return; 
       var result; 
       if (!this.$id) { 
        result = {}; 
       } else { 
        var scopeId = this.$id; 
        if (!results[scopeId]) { 
         results[scopeId] = {}; 
         this.$on("$destroy", function() { 
          delete results[scopeId]; 
         }); 
        } 
        result = results[scopeId]; 
       } 

       for (var groupKey in result) 
        result[groupKey].splice(0, result[groupKey].length); 

       var grpKey = -1; //GroupKey 
       var lastUserId; 
       for (var i = 0; i < data.length; i++) { 
        if (!result[grpKey] || lastUserId && lastUserId != data[i][key]) // Ex.: result[data[0]["UserId"]]{ => return UserId 
         result[++ grpKey] = []; 

        result[grpKey].push(data[i]); 
        lastUserId = data[i][key]; 
       } 

       var keys = Object.keys(result); 
       for (var k = 0; k < keys.length; k++) { 
        if (result[keys[k]].length === 0) 
         delete result[keys[k]]; 
       } 
       return result; 
     }; 
      }); 
+0

вы можете сделать plunkr WITN код –

+0

Привет пожалуйста найти этот адрес, его прекрасно работает ... http://plnkr.co/edit/8jB4wSRtKfVmEsTGZtfV?p=preview – Ahalyaa

+0

в этом, что вам нужно сделать точно –

ответ

0

в этом URL работает отлично ... http://plnkr.co/edit/8jB4wSRtKfVmEsTGZtfV?p=preview

  app.filter('groupBy', function ($timeout) { 
      return function (data, key) { 
    if (!key) return data; 
    var outputPropertyName = '__groupBy__' + key; 
    if(!data[outputPropertyName]){ 
     var result = {}; 
     for (var i=0;i<data.length;i++) { 
      if (!result[data[i][key]]) 
       result[data[i][key]]=[]; 
      result[data[i][key]].push(data[i]); 
     } 
     Object.defineProperty(result, 'length', {enumerable: false, value: Object.keys(result).length}); 
     Object.defineProperty(data, outputPropertyName, {enumerable:false, configurable:true, writable: false, value:result}); 
     $timeout(function(){delete data[outputPropertyName];},0,false); 
     } 
    return data[outputPropertyName]; 
      }; 
    });