2016-01-24 53 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; 
});