根据内部数组值跳过 JSON 数据记录 - D3

skipping JSON data records based on inner array values- D3

本文关键字:数据 JSON 记录 D3 内部 数组      更新时间:2023-09-26

我的数据如下。

        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}]}]

我已经尝试使用以下代码,但只出现了最后一个场地(venue2)。

法典:

                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>');

这是因为您在每次运行forEach调用时都会覆盖resultfilter。您可能希望在首次初始化 resultfilter 数组后在每个 forEach 循环中执行类似 resultfilter.push( <FILTER RESULT>) 的操作。像这样:

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

(另外,看起来您复制的data对象存在一些问题。如果它与复制/粘贴到这个问题中无关,那么也给它一个检查)

可以使用Array.prototype.map()来简化此操作

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