这两个行转换函数有什么不同?

伊索拉XCC

我从https://bl.ocks.org/找到了一个例子该示例用于d3.csv导入数据。但是我不想使用d3.csv导入外部文件,我只想使用当前环境中存在的数据,所以我自定义了自己的转换功能。

原始代码:

d3.csv("data.csv",
function(d, i, columns) {
  for (i = 1, t = 0; i < columns.length; ++i) t += d[columns[i]] = +d[columns[i]];
  d.total = t;
  return d;
},
function (data){
...
})
...

我的尝试:

var tmp_data = type(data);
dataViz(tmp_data);

function type(data) {
  data.columns = Object.keys(data[0]);
  for (i = 1, t = 0; i < data.columns.length; ++i) t += data[data.columns[i]] = +data[data.columns[i]];
  data.total = t;
  return data;
};

function dataViz(data){
...
};

将我的数据输入type函数后,data.totalNaN. 我不明白如何t += d[columns[i]] = +d[columns[i]]运作以及它看起来像data.totald3.csv方法。我怎么能修复我的代码?

杰拉尔多·费塔朵

您用作示例的 bl.ocks 中的原始数据(这个,您的链接已损坏)如下所示:

State,Under 5 Years,5 to 13 Years,14 to 17 Years,18 to 24 Years,25 to 44 Years,45 to 64 Years,65 Years and Over
AL,310504,552339,259034,450818,1231572,1215966,641667
AK,52083,85640,42153,74257,198724,183159,50277
AZ,515910,828669,362642,601943,1804762,1523681,862573
AR,202070,343207,157204,264160,754420,727124,407205
CA,2704659,4499890,2159981,3853788,10604510,8819342,4114496

因此,让我们看看如何复制该行函数:

您尝试的主要问题是,与原始行函数不同,您没有遍历数据数组中的每个对象当你这样做...

data.total = t;

...您只是在该数组中设置一个属性,这不是您想要的。

因此,您必须遍历数组中的每个对象。例如,使用Array.prototype.forEach

function type(data) {
  data.columns = Object.keys(data[0]);
  data.forEach(function(d) {
    for (i = 1, t = 0; i < data.columns.length; ++i) t += d[data.columns[i]] = +d[data.columns[i]];
    d.total = t;
  });
  return data;
};

这是演示:

var csv = `State,Under 5 Years,5 to 13 Years,14 to 17 Years,18 to 24 Years,25 to 44 Years,45 to 64 Years,65 Years and Over
AL,310504,552339,259034,450818,1231572,1215966,641667
AK,52083,85640,42153,74257,198724,183159,50277
AZ,515910,828669,362642,601943,1804762,1523681,862573
AR,202070,343207,157204,264160,754420,727124,407205
CA,2704659,4499890,2159981,3853788,10604510,8819342,4114496`;

const data = d3.csvParse(csv);

var tmp_data = type(data);

console.log(tmp_data)

function type(data) {
  data.columns = Object.keys(data[0]);
  data.forEach(function(d) {
    for (i = 1, t = 0; i < data.columns.length; ++i) t += d[data.columns[i]] = +d[data.columns[i]];
    d.total = t;
  });
  return data;
};
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

为什么这两个golang整数转换函数给出不同的结果?

为什么这两个DOMDocument函数的行为不同?

为什么这两个函数的类型不同?

为什么这两个模板函数的输出不同?

为什么这两个函数的结果不同?

这两个高阶函数有何不同?

使用send in python与这两个函数有什么不同

php.ini 这两个函数有什么不同?

这两个结果有什么不同?

这两个JS函数有什么区别?

这两个递归函数有什么区别?

这两个函数声明有什么区别?

这两个 Javascript 函数有什么区别?

这两个函数定义有什么区别

PowerShell 5.1 为什么这两个函数返回不同的类型

为什么这两个标准 ML 函数的签名不同?

为什么快速检查通过这两个不同的函数 Haskell?

为什么这两个函数给出不同的结果?

这两个事件监听器回调的添加方式有什么不同?函数VS箭头函数调用函数

xUnit.net:为什么这两个等效测试会有不同的结果?

“目标”和“目标”这两个词有什么不同

为什么这两个float64具有不同的值?

为什么这两个结构在内存中具有不同的大小?

为什么这两个右值引用示例具有不同的行为?

为什么这两个对addEventListener的javascript调用会有不同的结果

(android)这两个上下文代码有什么不同?

为什么这两个带有“ EXISTS”的查询的行为不同?

为什么这两个FParsec片段不同?

为什么这两个代码给出不同的输出