我有一些数据在其中有重复的日期,但值总是相同的 - 我如何只计算一次出现并将其反映在条形图上?
我猜我需要在分组时设置过滤功能,我不知道该怎么做。
数据:
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();
答案 0 :(得分:3)
这可能不是最有效的方法,但使用地图很简单:
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}]
答案 1 :(得分:1)
更好的可能是在使用Crossfilter库之前删除数据中的重复项(如果您从不需要此信息),使用以下代码,就在您定义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;