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

What is the shorthand in d3 for the identity function ("function(d) { return d; }")?

本文关键字:是什么 return 函数 function d3      更新时间:2023-09-26

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

function(d) { return d; }

d3中有没有内置的方法可以做到这一点?我知道我可以创建自己的no-op标识函数并在任何地方使用它,但d3似乎应该提供这一点。

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

从性能的角度来看,定义标识函数比重用Object构造函数具有更好的性能。如果在不同的类型中重用相同的标识函数,则差别不大。这里有一些性能测试。

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

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

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

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

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

我曾经见过Mike do.data(Object),它似乎可以在中工作

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 }
})