2017-07-11 27 views
1

私は、anglejs内のjsonデータをプルするwebsocket接続を持っています。基本的なアイデアはコードです:配列の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からの2回目の更新には、すでに投稿されている質問(コード:5)を削除するためのコード:6が含まれています。私は一致を見つけて質問を削除するために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"}] 

私が問題としているのは、最初の複製のみを削除することです。ウェブソケットからより多くのデータを受信すると、既に削除された古いデータが戻されます。

ご協力いただければ幸いです。あなたはangularjsにuniqueと呼ばれるフィルターを使用することができます

<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

これは私の角度のコードです。

例は、「配列内のデータ|ユニーク:fieldNameに」 NGリピート=以下の通りである

+0

私はユニークなフィルターを試しましたが、それでも重複した項目から1つを表示します。私はwebsocketからデータを取得してから、それを2番目の更新に戻すNg-showフィルタを使用しました。 – Navistar

+0

次のデータ構造を共有してください。 –

+0

上記の元のポストに2つのデータ構造の例があります。あなたが何か他のものが必要な場合は教えてください。 – Navistar

関連する問題