2017-12-01 5 views
0

ソケットからイベントを受け取る必要があるデータの属性が増えているので、インターフェイスオブジェクトで定義されている値をキーするだけで、データを受け取るときに配列に関連するデータだけをプッシュする方法はありますか?角度またはネイティブのJavaScriptを使用して関連するデータを配列にプッシュするにはどうすればよいですか?

app.component.ts

ngOnInit() { 
     this.socket.on('newMessage', (event) => { 
       console.log('Datasource', event); 
        this.dataSource.data.push(event); 
        this.dataSource.data = [...this.dataSource.data] 
        console.log("DATASOURCEINIT",this.dataSource.filteredData); 
       });; 
     }); 
    } 

export interface Element { 
    ticketNum: number; 
    ticketOpened: number; 
    eventType: string; 
    riskIndex: string; 
    riskValue: number; 
    severity: string; 
    lastModifiedDate: number; 
    assetID: string; 
} 

{ 
    "_id" : ObjectId("59cbd128b41475991bb6624f"), 
    "ticketState" : "Closed", 
    "rootCauseCode" : 50, 
    "escalationDeadline" : 0, 
    "totalImpactedCustomers" : 0,, 
    "ebmIndicator" : 0, 
    "adjustedTimeToRestore" : 30, 
    "keyItemAffected" : "LSVOIP.voip_scripts-6-1:1", 
    "rootCause" : "Other", 
    "ticketNum" : "0000002324638628", 
    "agentID" : "dd808a", 
    "assetID" : "5065295027006", 
    "ticketRole" : "Main", 
    "riskIndex" : "H", 
    "eventType" : "UPDATE-Customer Log", 
    "avgCreditAmt" : "110.00", 
    "adjustedTimeToRepair" : 30, 
    "ISOCurrencyCode" : "USD", 
    "ticketPriority" : "6", 
    "functionalArea" : "GLOBAL_AM", 
    "reportedCustomerImpact" : 0, 
    "assetPriority" : "Normal", 
    "rootTicketId" : "000000234638628", 
    "workQueue" : "VOIP_RULES", 
    "creditAmt" : "120.00", 
    "nodeName" : "LSVOIP_15065295", 
    "ticketStateID" : "3014", 
    "activeOrg" : "MO-BGTN-APPL", 
    "restoreDuration" : "0", 
    "severity" : "5 - Normal", 
    "lastModifiedDate" : "1506529546", 
    "riskValue" : 1, 
    "ticketOpened" : 1506529510, 

} 

はここでただ、これらのキーのペア

{ 
     ticketNum: number; 
     ticketOpened: number; 
     eventType: string; 
     riskIndex: string; 
     riskValue: number; 
     severity: string; 
     lastModifiedDate: number; 
     assetID: string; 
    } 
+0

データが何であるか、あなたはそれから必要なものを私たちを表示します。 – yBrodsky

+0

@yBrodskyがイベントを追加しました。私はそれから必要なものを見つけました – hussain

+0

変換された値のタイプが必要ですか?たとえば、 'ticketNum:number'と言うと、元のオブジェクトでは文字列です。それは文字列(先頭に '0'sを含むか、数値として欲しいですか?)の先頭にある' 0'を削除しますか?以下の私の答えを見てください。 – Intervalia

答えて

0

はそのまま元の値を取るいくつかのコードである必要があるイベントデータそれらを異なるタイプに変換しようとはしません。データを変換しなければならない場合は、コードを変更する必要があります。

var obj = { 
 
     "_id" : "59cbd128b41475991bb6624f", 
 
     "ticketState" : "Closed", 
 
     "rootCauseCode" : 50, 
 
     "escalationDeadline" : 0, 
 
     "totalImpactedCustomers" : 0, 
 
     "ebmIndicator" : 0, 
 
     "adjustedTimeToRestore" : 30, 
 
     "keyItemAffected" : "LSVOIP.voip_scripts-6-1:1", 
 
     "rootCause" : "Other", 
 
     "ticketNum" : "0000002324638628", 
 
     "agentID" : "dd808a", 
 
     "assetID" : "5065295027006", 
 
     "ticketRole" : "Main", 
 
     "riskIndex" : "H", 
 
     "eventType" : "UPDATE-Customer Log", 
 
     "avgCreditAmt" : "110.00", 
 
     "adjustedTimeToRepair" : 30, 
 
     "ISOCurrencyCode" : "USD", 
 
     "ticketPriority" : "6", 
 
     "functionalArea" : "GLOBAL_AM", 
 
     "reportedCustomerImpact" : 0, 
 
     "assetPriority" : "Normal", 
 
     "rootTicketId" : "000000234638628", 
 
     "workQueue" : "VOIP_RULES", 
 
     "creditAmt" : "120.00", 
 
     "nodeName" : "LSVOIP_15065295", 
 
     "ticketStateID" : "3014", 
 
     "activeOrg" : "MO-BGTN-APPL", 
 
     "restoreDuration" : "0", 
 
     "severity" : "5 - Normal", 
 
     "lastModifiedDate" : "1506529546", 
 
     "riskValue" : 1, 
 
     "ticketOpened" : 1506529510, 
 
    } 
 

 
    function trimObj(obj) { 
 
     var neededKeys = ["ticketNum", "ticketOpened", "eventType", "riskIndex", "riskValue", "severity", "lastModifiedDate", "assetID"]; 
 
     var newObj = {}; 
 
     neededKeys.forEach(
 
     function (key) { 
 
      newObj[key] = obj[key]; 
 
     } 
 
    ); 
 
     return newObj; 
 
    } 
 

 
    var a = trimObj(obj); 
 
    console.log(JSON.stringify(a,0,2));

関連する問題