2016-01-24 52 views
0

我的數據如下。基於內部數組值跳過JSON數據記錄-D3

 data=[ {"venue":"Foyer","values":[{"avg":996.8,"sessions":[{"minTime":0,"maxTime":599,"count":50}, 
               {"minTime":600,"maxTime":1199,"count":39}, 
               {"minTime":1800,"maxTime":2399,"count":43}, 
               {"minTime":2400,"maxTime":2999,"count":48}],"timestamp":1449360000}, 
         {"avg":986.4,"sessions":[{"minTime":0,"maxTime":599,"count":152}, 
               {"minTime":600,"maxTime":1199,"count":51}, 
               {"minTime":1200,"maxTime":1799,"count":36}, 
               {"minTime":1800,"maxTime":2399,"count":68}, 
               {"minTime":3000,"maxTime":3599,"count":34}],"timestamp":1452540000}]}, 
       {"venue":"Venue1","values":[{"avg":996.8,"sessions":[{"minTime":0,"maxTime":599,"count":62}, 
               {"minTime":600,"maxTime":1199,"count":33}, 
               {"minTime":1800,"maxTime":2399,"count":37}, 
               {"minTime":2400,"maxTime":2999,"count":24}],"timestamp":1449360000}, 
         {"avg":986.4,"sessions":[{"minTime":0,"maxTime":599,"count":34}, 
               {"minTime":600,"maxTime":1199,"count":52}, 
               {"minTime":1200,"maxTime":1799,"count":21}, 
               {"minTime":1800,"maxTime":2399,"count":142}, 
               {"minTime":3000,"maxTime":3599,"count":23}],"timestamp":1452540000}]}, 
       {"venue":"Venue2","values":[{"avg":996.8,"sessions":[{"minTime":0,"maxTime":599,"count":44}, 
               {"minTime":600,"maxTime":1199,"count":25}, 
               {"minTime":1800,"maxTime":2399,"count":34}, 
               {"minTime":2400,"maxTime":2999,"count":23}],"timestamp":1449360000}, 
         {"avg":986.4,"sessions":[{"minTime":0,"maxTime":599,"count":31}, 
               {"minTime":600,"maxTime":1199,"count":11}, 
               {"minTime":1200,"maxTime":1799,"count":122}, 
               {"minTime":1800,"maxTime":2399,"count":12}, 
               {"minTime":3000,"maxTime":3599,"count": 3}],"timestamp":1452540000}]}] 

我想過濾來自「值」的記錄只有匹配的時間戳。在「值」對非匹配時間戳的條目應當被過濾掉,但是輸出應當是相同的數據結構的,

預期輸出:

  [{"venue":"Foyer","values":[{"avg":996.8,"sessions":[{"minTime":0,"maxTime":599,"count":50}, 
            {"minTime":600,"maxTime":1199,"count":39}, 
            {"minTime":1800,"maxTime":2399,"count":43}, 
            {"minTime":2400,"maxTime":2999,"count":48}],"timestamp":1449360000}]}, 
      {"venue":"Venue1","values":[{"avg":996.8,"sessions":[{"minTime":0,"maxTime":599,"count":62}, 
            {"minTime":600,"maxTime":1199,"count":33}, 
            {"minTime":1800,"maxTime":2399,"count":37}, 
            {"minTime":2400,"maxTime":2999,"count":24}],"timestamp":1449360000}]}, 
      {"venue":"Venue2","values":[{"avg":996.8,"sessions":[{"minTime":0,"maxTime":599,"count":44}, 
            {"minTime":600,"maxTime":1199,"count":25}, 
            {"minTime":1800,"maxTime":2399,"count":34}, 
            {"minTime":2400,"maxTime":2999,"count":23}],"timestamp":1449360000}]}] 

我試圖用下面的代碼,而是僅最後的場地(場地2)出現。

代碼:

   d3.json("Dwell.json", function(error,data){  
       data.forEach(function(a) { 
       resultfilter={ "venue": a.venue, "values":a.values.filter(function (d) { return d.timestamp = 1449360000 } ) } 
       }) 
       document.write('<pre>' + JSON.stringify(resultfilter) + '</pre>'); 

回答

1

這是因爲你在forEach調用的每次運行覆蓋resultfilter。 在第一次初始化resultfilter陣列之後,您可能想要在每個forEach循環中執行類似​​的操作。事情是這樣的:

resultfilter = []; 
data.forEach(function(a) { 
    resultfilter.push(...); 
}) 

(。此外,看起來像你複製的data對象有一些問題,如果它粘貼複製/到這個問題是沒有關係的,然後給出一個檢查過)

1

燦通過使用簡化Array.prototype.map()

var resultfilter = data.map(function(item) { 
     item.values = item.values.filter(function(d) { 
      return d.timestamp = 1449360000 
     }); 
     return item; 
});