2017-10-04 24 views
0

我在每一秒的數據來從網絡套接字如如何多維數組轉換爲這種格式

1- [["X",1],["Y",2],["Z",3]] 
 

 
2 -[["X",2],["Y",7]] 
 

 
3 -[["Y",5],["Z",1]] 
 

 
4 -[["X",7]] 
 
...

每次迭代

1所得到的陣列 - ["X",1,0],["Y",2,0],["Z",3,0]]// 0沒有什麼區別,它也可以是+或 -

2 - ["X",2,1],["Y",7,5],["Z",3,0]] //從第一次迭代差異

3 - ["X",1,0],["Y",5,-2],["Z",1,-2]] //從第二

的事情DIFF我已經嘗試到現在

this.socketSubscription = this.socket.messages.subscribe((message) => { 
     this.prev = this.rows; 

     this.rows = JSON.parse(message); 
     if(this.prev){ 
     this.rows.forEach(element => { 
      for (var index = 0; index < element.length; index++) { 
      console.log(element[index]); 
      let check = this.prev.find(prevElement => prevElement.find(el => el[0])); 
      console.log("check"+check); 
/*    if (element[0] ===())){ 
       console.log("here"); 
      } */ 
      } 
     }); 
     } 
+0

你是否有索引或鍵上的值比較?您每次都會得到不同的密鑰,因爲我可以看到 –

+0

我需要將傳入的值與prev進行比較,並且如果有cahnage jsut列表並繼續執行此操作 – INFOSYS

回答

1

你不需要for循環或嵌套find。這是足夠接近,應該讓你走上正軌:

var results; 

function process(data) { 
    if (results) { 
     data.forEach(element => { 
      var key = element[0]; 
      var val = element[1]; 
      var index = results.findIndex(result => result[0] == key); 
      var prevVal = results[index][1]; 
      var diff = val - prevVal; 
      results[index][1] = val; 
      results[index][2] = diff; 
     }); 
    } else { 
     results = data.map(element => { element[2] = 0; return element; }); 
    } 
} 

var a = [["X",1],["Y",2],["Z",3]]; 
var b = [["X",2],["Y",7]]; 
var c = [["Y",5],["Z",1]]; 

process(a); console.log(results); // [["X",1,0], ["Y",2, 0], ["Z",3, 0]] 
process(b); console.log(results); // [["X",2,1], ["Y",7, 5], ["Z",3, 0]] 
process(c); console.log(results); // [["X",2,0], ["Y",5,-2], ["Z",1,-2]]