如何找到对象JSON数组的重复值,也需要像这样将它们统一:

时间:2019-06-08 15:46:32

标签: javascript

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”,  “生产力”:是

因为我想添加时间

0 个答案:

没有答案