Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/77.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
Javascript d3.js如何为所有json对象值的总和创建一个段落元素_Javascript_Html_Json_D3.js - Fatal编程技术网

Javascript d3.js如何为所有json对象值的总和创建一个段落元素

Javascript d3.js如何为所有json对象值的总和创建一个段落元素,javascript,html,json,d3.js,Javascript,Html,Json,D3.js,我有一个d3函数,它尝试执行以下任务: 从json文件读取 获取所有“计数”值的总和 返回一个段落元素,该元素表示“此范围内的(总和(计数))订单总数” 我遇到的问题是,它为数据中的每个对象创建了多个段落元素。例如,数据总共有4个对象,因此它返回4个段落语句。无论数据中有多少个对象,我如何优化它以只返回一个p元素,或者是否有更好的方法来完成上面列出的任务 数据: D3脚本 d3.json('orderQuantities.json', function(data) {

我有一个d3函数,它尝试执行以下任务:

  • 从json文件读取
  • 获取所有“计数”值的总和
  • 返回一个段落元素,该元素表示“此范围内的(总和(计数))订单总数”
  • 我遇到的问题是,它为数据中的每个对象创建了多个段落元素。例如,数据总共有4个对象,因此它返回4个段落语句。无论数据中有多少个对象,我如何优化它以只返回一个p元素,或者是否有更好的方法来完成上面列出的任务

    数据:

    D3脚本

    d3.json('orderQuantities.json', function(data) {    
                Array.prototype.sum = function (prop) {
                    var sum = 0
                    for ( var i = 0, _len = this.length; i < _len; i++ ) {
                        sum += this[i][prop]
                    }
                    return sum
                } 
                console.log(data.sum("Count"))
    d3.select('body')                                            
    .selectAll('p')                                            
    .data(data)                                                 
    .enter()                                                 
    .append('p')                                             
    .text(function(d) {
      return 'Total of ' + data.sum("Count")  + ' orders from this time range.';    
    });});
    
    d3.json('orderQuantilities.json',函数(数据){
    Array.prototype.sum=函数(prop){
    var总和=0
    对于(变量i=0,_len=this.length;i<_len;i++){
    总和+=本[i][prop]
    }
    回报金额
    } 
    console.log(data.sum(“Count”))
    d3.选择('主体')
    .selectAll('p')
    .数据(数据)
    .输入()
    .append('p')
    .文本(功能(d){
    返回'Total of'+data.sum(“Count”)+'来自此时间范围的订单';
    });});
    

    提前谢谢

    为了让脚本正常工作,我在脚本中做了一些更改

  • 您不需要执行
    selectAll('p')
    ,因为您没有更新任何现有的
    p
    元素。相反,您希望在文本/数据中附加一个新的

  • 您还可以删除
    .data(data).enter()
    ,因为这将根据您的数据附加元素,我们不希望这样。我们只需要一个
    p
    元素,而不是四个

  • 下面的代码段应该可以完成这项工作:

        d3.select('body')
         .append('p')
         .text(function(d) {
             return 'Total of ' + data.sum("Count") + ' orders from this time range.';
          });
    

    jsiddle-

    您可以使用sum
    Count
    ,而不是创建一个
    sum
    函数;将
    data.sum(“Count”)
    替换为
    data.reduce(函数(acc,curItem){return acc+curItem.Count},0)
    应该可以工作。嘿,谢谢!这很有效。您是否能够协助处理此相关D3请求?
        d3.select('body')
         .append('p')
         .text(function(d) {
             return 'Total of ' + data.sum("Count") + ' orders from this time range.';
          });