javascript-从d3中的系列创建系列
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript-从d3中的系列创建系列,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2259字,纯文字阅读大概需要4分钟。
内容图文
![javascript-从d3中的系列创建系列](/upload/InfoBanner/zyjiaocheng/665/db5db74dd48e41deb16911a5791a037e.jpg)
我有这种形式的数据(简化了,但假设在Admin和Mining之间有20列):
Date,Series,Admin,Mining,CPI
1990,Ordinary Time Earnings,20,30,96
1991,Ordinary Time Earnings,22,33,100
1990,Total Earnings,25,38,96
1991,Total Earnings,29,43,100
我将其分成两个系列,如下所示:
d3.csv("avgearnings_v1_1.csv", function(error, data) {
if (error) throw error;
OrdinaryTimeEarnings = data
.filter(function(d) {
if(d.Series == 'Ordinary Time Earnings')
return d;
});
TotalEarnings = data
.filter(function(d) {
if(d.Series == "Total Earnings")
return d;
});
并可以将其显示在图表上而没有任何问题.我接下来要做的是再创建两个系列:
OrdinaryTimeEarningsReal = OrdinaryTimeEarnings;
TotalEarningsReal = TotalEarnings;
然后重新计算这些新序列.基本上:
>对于任何非日期/系列/ CPI的列
>取当年的CPI值
>分别将每个Mining-Admin列除以CPI,然后乘以100.
>因此:新值=([旧值] / [CPI])* 100
我的代码很糟糕,但是我可以使用以下代码获取正确的值:
OrdinaryTimeEarningsReal
.forEach(function (z,i) {
var CPI = z["CPI"];
d3.map(z, function(b) {return b;})
.forEach(function (c) {
if(c !== "Date" && c !== "Series" && c !== "CPI" )
OrdinaryTimeEarningsReal[i][c] = ((z[c])/(CPI))*100;
});
});
但是,当我这样做时,它也在某种程度上更新了原始的OrdinaryTimeEarnings系列,以使它们彼此相等,并且OrdinaryTimeEarnings中的原始数据丢失了.
我不确定是使用裸对象(在其中进行迭代,eek!)还是上面的代码实际上是在更改原始数据对象的值(以及本系列的全部4个)之后创建的只是对其的引用).
无论哪种方式,我都无法解决!我尝试了几种不同的语法形式,但无法解决.帮助将不胜感激,以实现这一目标.
解决方法:
如果您确实使用此代码“复制”了阵列:
OrdinaryTimeEarningsReal = OrdinaryTimeEarnings;
TotalEarningsReal = TotalEarnings;
那么当您说他们引用了相同的对象时,您说的没错.在JavaScript中,数组是可变的,使用上面的代码,您刚刚创建了2个新变量,并引用了内存中的现有数组.
为了深度克隆对象数组,请使用以下方法:
OrdinaryTimeEarningsReal = JSON.parse(JSON.stringify(OrdinaryTimeEarnings));
TotalEarningsReal = JSON.parse(JSON.stringify(TotalEarnings));
这将创建数组的副本,并将其分配给新变量,以便在编辑它们时,初始数组将不受影响.
现在,关于您的代码,它有点太复杂了.如果我正确理解您要实现的目标,则可以将其简化如下:
OrdinaryTimeEarningsReal
.forEach(function (z,i) {
for (var c in z) {
if (z.hasOwnProperty(c) && c !== "Date" && c !== "Series" && c !== "CPI" )
z[c] = z[c] / z.CPI * 100;
});
});
祝好运!
内容总结
以上是互联网集市为您收集整理的javascript-从d3中的系列创建系列全部内容,希望文章能够帮你解决javascript-从d3中的系列创建系列所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。