im用d3做一个饼图,我需要用它们包含的日期过滤数组对象的json,所以如果我放最后一天,它只需要向我显示与今天具有相同日期的对象即可( ),当我想在上周或上个月对其进行过滤时,问题就来了,因为对象包含标题,日期,花费的时间和布尔值,因此我想查找包含相同标题的对象并统一它们以及该对象我统一了,我想加上我先前统一的对象的时间值
这是我过滤对象数组json的数据(对象数组)的方式
data.forEach(function (d) {
/*-------------------------------------------*/
if (dataTime == 'all') {
if (d.date.fecha == TodayDateNow) {
filteredData.push(d);
}
} else if (dataTime == 'week') {
if (d.date.fecha >= addDays(TodayDate, 7)) {
filteredData.push(d);
console.log('array' + d.date.fecha)
}
} else if (dataTime == 'month') {
if (d.date.fecha >= addDays(TodayDate, 30)) {
data.forEach(function (x) {
if (d.pie.title == x.pie.title && d.date.fecha != x.date.fecha) {
//console.log(d)
}
})
filteredData.push(d);
}
}
})
update(filteredData[0]);
function update(data) {
var pie = d3.pie()
.value(function (d) {
return d.pie.time;
})
var data_ready = pie((filteredData))
var color = d3.scaleOrdinal()
.domain(data)
.range(["#FB8072", "#8DD3C7"])
var svg = d3.select("#my_dataviz")
.append("svg")
.attr("width", width)
.attr("height", height)
.append("g")
.attr("transform", "translate(" + width / 2 + "," + height / 2 + ")");
var arc = d3.arc()
.outerRadius(radius - 10)
.innerRadius(100);
var g = svg.selectAll(".arc")
.data(pie(filteredData))
.enter().append("g");
var div = d3.select("body").append("div")
.attr("class", "tooltip")
.style("opacity", 0);
g.append("text")
.attr("transform", function (d) {
var _d = arc.centroid(d);
_d[0] *= 1.6;
_d[1] *= 1.5;
return "translate(" + _d + ")";
})
.attr("dy", ".50em")
.style("text-anchor", "middle")
.style("z-index", "1")
.text(function (d) {
if (d.data.time < 20) {
return '';
}
return d.data.pie.title;
});
g.append("text")
.attr("text-anchor", "middle")
.attr('font-size', '4em')
.attr('y', 20)
.text(totalCount + ' M');
svg
.selectAll('whatever')
.data(data_ready)
.enter()
.append('path')
.on("mouseover", function (d) {
div.transition()
.duration(200)
.style("opacity", 1)
.style("font-size", '20px')
.style("font-weight", "bold")
div.html(d.data.pie.time + ' Min')
.style("left", (d3.event.pageX) + "px")
.style("top", (d3.event.pageY - 28) + "px")
})
.on("mouseout", function (d) {
div.transition()
.duration(500)
.style("opacity", 0)
})
.attr('d', d3.arc()
.innerRadius(radius - 70)
.outerRadius(radius)
)
.attr('fill', function (d) {
return (color(d.data.pie.productivity))
})
.attr("stroke", "white")
.style("stroke-width", "2px")
.style("opacity", 1)
}
创建馅饼
https://imgur.com/weOJD2f 今天过滤掉的馅饼
根据上个月筛选的饼图,显示“学习”的两个切片必须一次合并成一个https://imgur.com/NBDAIw3
{
"datapies": [
{
"pie": {
"title": "Study",
"time": "20",
"productivity": true
},
"date": {
"fecha": "2019-06-08"
},
"_id": "5cfbc97d42dc711d0c0db501",
"__v": 0
},
{
"pie": {
"title": "Gym",
"time": "60",
"productivity": true
},
"date": {
"fecha": "2019-06-05"
},
"_id": "5cf7ea511e591651c490ef48",
"__v": 0
},
{
"pie": {
"title": "Study",
"time": "160",
"productivity": true
},
"date": {
"fecha": "2019-06-05"
},
"_id": "5cf7e2261e591651c490ef47",
"__v": 0
},
{
"pie": {
"title": "Twitter",
"time": "120",
"productivity": false
},
"date": {
"fecha": "2019-06-05"
},
"_id": "5cf7e1eb1e591651c490ef46",
"__v": 0
}
]
}
这是我的对象JSON数组,如您所见,有2个具有相同值(研究)的属性,因此,如果我在上个月对它们进行过滤,则需要将2个对象统一为一个,这样看起来就像:>
“标题”:“ Study”, “ time”:“ 180”, “生产力”:是
因为我想添加时间