Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
D3.js 忽略重复的日期值_D3.js_Crossfilter_Dc.js - Fatal编程技术网

D3.js 忽略重复的日期值

D3.js 忽略重复的日期值,d3.js,crossfilter,dc.js,D3.js,Crossfilter,Dc.js,我有一些数据中有重复的日期,但值总是相同的-我如何只计算一次并将其反映在条形图上 我猜我需要在分组上设置一个过滤函数,我不知道该怎么做 数据: var jsonStr = ([ {"date": "2011-11-14", "value": 0.1121}, {"date":"2011-11-25", "value": -0.0231}, {"date":"2011-11-25", "value": -0.0231}, {"date":"2011-11-25", "val

我有一些数据中有重复的日期,但值总是相同的-我如何只计算一次并将其反映在条形图上

我猜我需要在分组上设置一个过滤函数,我不知道该怎么做

数据:

var jsonStr = ([
   {"date": "2011-11-14", "value": 0.1121},
   {"date":"2011-11-25", "value": -0.0231},
   {"date":"2011-11-25", "value": -0.0231},
   {"date":"2011-11-25", "value": -0.0231}
]);
守则:

//setup dimensions
var dateDimension = ndx.dimension(function (d) {
    return d.value;
});

var fluctuation = ndx.dimension(function (d) {
    return Math.round(d.value *10)/10;
});

var fluctuationGroup = fluctuation.group();

fiddle:

最好在使用交叉过滤器库之前,在定义
jsonStr
之后,使用以下代码删除数据中的重复项(如果您不需要此信息):

var newJson = [];
for (var i = 0; i < jsonStr.length; i++) {
    var found = false;
    for (var j = 0; j < newJson.length; j++) {
        if (jsonStr[i].date === newJson[j].date) {
            found = true;
            break;
        }
    }
    if (!found) {
        newJson.push(jsonStr[i]);
    }
}
jsonStr = newJson;
var newJson=[];
对于(var i=0;i
最好在使用交叉过滤器库之前,在定义
jsonStr
之后,使用以下代码删除数据中的重复项(如果您不需要此信息):

var newJson = [];
for (var i = 0; i < jsonStr.length; i++) {
    var found = false;
    for (var j = 0; j < newJson.length; j++) {
        if (jsonStr[i].date === newJson[j].date) {
            found = true;
            break;
        }
    }
    if (!found) {
        newJson.push(jsonStr[i]);
    }
}
jsonStr = newJson;
var newJson=[];
对于(var i=0;i
这可能不是最有效的方法,但使用地图很简单:

var uniqueValues = d3.map([])
jsonStr.forEach(function(d){ uniqueValues.set(d.date, d); });

newJsonStr = []
uniqueValues.forEach(function(d){ newJsonStr.push(uniqueValues.get(d)); });
结果是:

[{"date":"2011-11-14","value":0.1121},{"date":"2011-11-25","value":-0.0231}]

这可能不是最有效的方法,但使用地图很简单:

var uniqueValues = d3.map([])
jsonStr.forEach(function(d){ uniqueValues.set(d.date, d); });

newJsonStr = []
uniqueValues.forEach(function(d){ newJsonStr.push(uniqueValues.get(d)); });
结果是:

[{"date":"2011-11-14","value":0.1121},{"date":"2011-11-25","value":-0.0231}]

谢谢你,亚当。不幸的是,为了让问题变得简单,我将问题简化了……其中还有其他列值使行具有唯一性。不过,我想我可以用一组新的数据建立一个新的维度——我最终会有数千行需要处理……如果您对键使用两个属性的组合,那么解决方案仍然有效:uniqueValues.set(JSON.stringify(d.date)+JSON.stringify(d.otherField)),d)。不要担心成千上万的排;javascript现在相当快。谢谢你,亚当。不幸的是,为了让问题变得简单,我将问题简化了……其中还有其他列值使行具有唯一性。不过,我想我可以用一组新的数据建立一个新的维度——我最终会有数千行需要处理……如果您对键使用两个属性的组合,那么解决方案仍然有效:uniqueValues.set(JSON.stringify(d.date)+JSON.stringify(d.otherField)),d)。不要担心成千上万的排;javascript现在相当快了。谢谢-请看我上面的回复。我想在加载数据时,我可以将重复数据提取到一个单独的数组中(该数据在同一日期将具有其他唯一的列值)谢谢-请参阅我上面的回答。我想在加载数据时,我可以将重复数据提取到一个单独的数组中(该数据在同一日期将具有其他唯一的列值)