Javascript 计算D3数组和积的最大值

Javascript 计算D3数组和积的最大值,javascript,d3.js,Javascript,D3.js,我正在读取一个csv文件,需要使用D3.js或普通JavaScript从该数据计算两个数字: 这也许可以在一个步骤中完成,但为了便于解释,我将其细分: 一旦我的数据被读入,我需要遍历每一列,标记为“一”到“十” (此数据的长度未知,因此可能会增加到12或20) …每次将“乘数”后面的每列乘以称为“乘数”的变量 (在数据中,我给了它1.5,1,0,5的任意值,以使读数更清晰) 这提供了一个新的数字网格,根据该网格,必须为从1到n的每个ID计算每个新数字的最大分数和最小分数。所以每个ID都有一个最大

我正在读取一个csv文件,需要使用D3.js或普通JavaScript从该数据计算两个数字:

这也许可以在一个步骤中完成,但为了便于解释,我将其细分:

一旦我的数据被读入,我需要遍历每一列,标记为“一”到“十” (此数据的长度未知,因此可能会增加到12或20)

…每次将“乘数”后面的每列乘以称为“乘数”的变量 (在数据中,我给了它1.5,1,0,5的任意值,以使读数更清晰)

这提供了一个新的数字网格,根据该网格,必须为从1到n的每个ID计算每个新数字的最大分数和最小分数。所以每个ID都有一个最大值和最小值。我需要知道作为变量返回的整个数据中这些新分数的最大值和最小值

数据被读入:

d3.csv(“data.csv”,函数(csv){
var mydata=bar
.selectAll(“rect”)
.数据(csv)
.enter()
}

示例数据如下所示:

ID、总数、倍数、一、二、三、四、五、六、七、八、九、十 1,16500,1.5,0.362,0.37,0.1,0.101,0.035,0.362,0.37,0.1,0.101,0.035 2,61000,1,0.426,0.382,0.115,0.084,0.053,0.426,0.382,0.115,0.084,0.053 3,48700,1.5,0.156,0.531,0.195,0.399,0.14,0.156,0.149,0.106,0.399,0.14 4,33000,0.5,0.462,0.409,0.149,0.106,0.149,0.106,0.085,0.1,0.106,0.051 5,8000,0.5,0.327,0.316,0.085,0.1,0.085,0.1,0.057,0.245,0.1,0.057 612760,1,0.149,0.195,0.057,0.245,0.057,0.245,0.119,0.114,0.245,0.08

此原始数据无法替换,因为我稍后会引用它

因此,从这些数据中,在遍历所有列之后,取整个数据的最大值和最小值——最小值为0.003535,最大值为3.8875575

…我需要函数返回var min和var max,以便下次计算


希望有人能帮上忙!

一种方法是将数据作为文本加载,然后使用文本将CSV作为数组进行解析。因此,只需获取片段,忽略前3列即可

d3.text('data.csv', function(text)
{
  var rows = d3.csv.parseRows(text, function(row, index)
  {
    // skip header, coerce to Number values
    if(index > 0)
    {
      return row.map(Number);
    }
  });
  var extent = rows.reduce(function(result, row)
  {
    return d3.extent(result.concat(row.slice(3).map(function(value)
    {
      return value * row[2];
    })));
  }, [NaN, NaN]);
  var min = extent[0];
  var max = extent[1];
});
另一种方法是,如果对象数组更便于以后打印,则可以执行以下操作

var nonMeasureColumns = {'ID': 0, 'total': 0, 'multiplier': 0};
d3.csv('data.csv')
  .row(function(row)
  {
    for(var key in row)
    {
      row[key] = Number(row[key]);
    }
    return row;
  })
  .get(function(error, rows)
  {
    var extent = rows.reduce(function(result, row)
    {
      return d3.extent(result.concat(d3.map(row).entries()
        .filter(function(entry)
        {
          return !(entry.key in nonMeasureColumns);
        })
        .map(function(entry)
        {
          return entry.value * row['multiplier'];
        })
      ));
    }, [NaN, NaN]);
    var min = extent[0];
    var max = extent[1];
  });