2016-01-24 2 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

Это потому, что вы перезапись resultfilter на каждом пробеге forEach вызова. Возможно, вы захотите вместо этого сделать что-то вроде resultfilter.push(<FILTER RESULT>) в каждом цикле forEach после первой инициализации массива resultfilter. Что-то вроде этого:

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; 
}); 
Смежные вопросы