2017-07-11 65 views
1

我有一個websocket連接,它以angularjs的方式提取json數據。基本思想是代碼:數組中的5個項目是問題和代碼:數組中的6個項目是刪除問題的請求。在angularjs中刪除重複的數組項目

收到看起來像這樣第一JSON數據:

[{"code":1,"timestamp":"2017-07-11T21:00:16.655706556Z","text":"Welcome to the listening pool, total clients 1","uuid":"51c7d6c7-8b6a-4b39-a460-343480e6cd23"},{"code":5,"timestamp":"2017-07-11T21:00:18.736695286Z","text":"By trying we can easily learn to endure adversity. Another man's, I mean.\n\t\t-- Mark Twain\n","uuid":"9046a275-ada8-415a-9dd3-37bdbfc43f75"}] 

代碼:那麼5項目將被張貼到網頁中的一個問題隊列。來自websocket的第二次更新將包括一個代碼:6刪除已發佈的問題(代碼:5)。我正在使用uuid值來查找匹配並刪除問題。

[{"code":1,"timestamp":"2017-07-11T21:00:16.655706556Z","text":"Welcome to the listening pool, total clients 1","uuid":"51c7d6c7-8b6a-4b39-a460-343480e6cd23"},{"code":5,"timestamp":"2017-07-11T21:00:18.736695286Z","text":"By trying we can easily learn to endure adversity. Another man's, I mean.\n\t\t-- Mark Twain\n","uuid":"9046a275-ada8-415a-9dd3-37bdbfc43f75"},{"code":6,"timestamp":"2017-07-11T21:00:23.870193214Z","uuid":"9046a275-ada8-415a-9dd3-37bdbfc43f75"}] 

我遇到的問題是,它只能刪除第一個副本。當從網絡套接字接收到更多數據時,它會將舊數據移回已刪除的項目。

任何幫助將不勝感激。

這是我的角度代碼:

<section ng-controller="WaitingRoom"> 
    <ul ng-repeat="data in MyData.collection | orderBy: '-timestamp' track by $index" ng-show="data.code == 5 && data.uuid != MyData.collection[$index].uuid"> 
     <li id="code"> Code: {{ data.code}} </li> 
     <li> Timestamp: {{ data.timestamp | date:'medium'}} </li> 
     <li> Question: {{ data.text}} </li> 
     <li id="uuid"> ID: {{ data.uuid}} </li> 
    </ul> 
    </section> 

angular.module('MY_APP', ['ngWebSocket']) 
//      
.factory('MyData', function($websocket) { 
    // Open a WebSocket connection 
    var dataStream = $websocket('ws://website.com/data'); 

    var collection = []; 

    dataStream.onMessage(function(message) { 
    collection.push(JSON.parse(message.data)); 
    }); 

    var methods = { 
    collection: collection, 
    get: function() { 
     dataStream.send(JSON.stringify({ action: 'get' })); 
    } 
    }; 

    return methods; 
}) 
.controller('WaitingRoom', function ($scope, MyData) { 
    $scope.MyData = MyData; 
}); 

+0

你能只是'collection.push之前增加一個檢查(JSON.parse(message.data));'線檢查UUID,看它是否已經在收藏裏?如果不是,則添加它。否則 - 忽略,替換或刪除該項目。 –

回答

0

我想我得到它的工作。不知道這是否是最好的方式,但它似乎工作。任何關於清理或更好的解決方案的建議將不勝感激。

dataStream.onMessage(function(message) { 
     var data = collection.push(JSON.parse(message.data)); 
     var data = (JSON.stringify(collection)); 


     var data = Object(collection); 

     for (var i = 0; i < data.length; i++) { 
       var uuid1 = collection[i].uuid; 
       // console.log(uuid1); 

       for (var j = 0; j < data.length; j++) { 

        var uuid2 = collection[j].uuid; 
        // console.log(uuid2); 

        if (i !=j){ 

         if (uuid1 == uuid2){ 
          console.log("Duplicate found: " + uuid1); 
          collection.splice(i); 
          collection.splice(j); 
         } 
         else console.log("No Duplicates"); 
         } 
       } 
     } 


     }); 
0

您可以使用過濾器angularjs稱爲unique

例子是「在陣列中的數據|獨特:字段名」下面 NG-重複=給出

+0

我嘗試了獨特的過濾器,但仍顯示一個重複的項目。我使用了第一次使用的Ng-Show過濾器,它從WebSocket獲取數據,但隨後將其重新放在第二個更新上 – Navistar

+0

您可以共享後面的數據結構 –

+0

上面原始文章中有兩個數據結構示例。讓我知道你是否需要別的東西。 – Navistar