繁体   English   中英

d3中身份函数的简写是什么(“function(d){return d;}”)?

[英]What is the shorthand in d3 for the identity function (“function(d) { return d; }”)?

通过d3文档,我看到这个代码(身份函数)到处重复:

function(d) { return d; }

在d3中是否有内置方式来执行此操作? 我知道我可以创建自己的无操作身份功能并在任何地方使用它,但似乎d3应该提供这个。

我以前看到迈克做.data(对象)似乎工作

http://tributary.io/inlet/5842519

但我不知道为什么我不再看到它了

var svg = d3.select("svg")

var data = [[10,20],[30,40]];
svg.selectAll("g")
.data(data)
.enter()
.append("g")
.attr("transform", function(d,i) { return "translate(" + [i * 100, 0] + ")"})
.selectAll("circle")
//.data(function(d) { console.log(d); return d })
.data(Object)
.enter()
.append("circle")
.attr({
  cx: function(d,i) { return 100 + i * 40 },
  cy: 100,
  r: function(d,i) { return d }
})

我想知道为什么没有d3.identity函数作为库的一部分,并且找不到没有理由的理由。

从性能的角度来看,定义一个标识函数比重用Object构造函数提供了更好的性能。 如果在不同类型中重复使用相同的身份函数,则没什么区别。 一些性能测试在这里

所以在我的情况下,我滥用D3并自己添加了这个功能:

d3.identity = function(d) { return d; }

如果您使用下划线,那么您也可以使用_.identity函数。

关于使用Object构造函数,我的假设是每次调用时都会创建一个新的不必要的对象,这会浪费内存和CPU时间,无论是创建还是垃圾回收。 这可以针对不可变类型(例如某些运行时中的数字)进行优化。

编辑 Phrogz有一篇简短的文章,展示了在使用D3时减少lambda数量的一些有用的简写,其中包括一个身份函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM