Javascript d3中标识函数(“函数(d){return d;}”)的缩写是什么?
查看d3文档,我发现代码(身份功能)到处重复:Javascript d3中标识函数(“函数(d){return d;}”)的缩写是什么?,javascript,d3.js,Javascript,D3.js,查看d3文档,我发现代码(身份功能)到处重复: function(d) { return d; } d3中是否有内置的方法来实现这一点?我知道我可以创建自己的no-op-identity函数,并在任何地方使用它,但似乎d3应该提供这个功能。我曾经看到Mike do.data(Object)似乎可以工作 但我不知道为什么我再也看不到它了 var svg = d3.select("svg") var data = [[10,20],[30,40]]; svg.selectAll("g") .d
function(d) { return d; }
d3中是否有内置的方法来实现这一点?我知道我可以创建自己的no-op-identity函数,并在任何地方使用它,但似乎d3应该提供这个功能。我曾经看到Mike do.data(Object)似乎可以工作 但我不知道为什么我再也看不到它了
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
函数,并且找不到不使用它的理由
从性能角度来看,定义标识函数比重用对象
构造函数提供更好的性能。如果在不同类型之间重用相同的标识函数,则差别不大。一些
所以在我的例子中,我滥用了D3,自己添加了函数:
d3.identity = function(d) { return d; }
如果您正在使用,那么您也可以使用该函数
关于使用对象
构造函数,我的假设是每次调用时都会创建一个新的、不必要的对象,这会浪费内存和CPU时间,用于创建和垃圾收集。对于不可变的类型,例如某些运行时中的数字,可以对此进行优化
EDITPhrogz提供了一个有用的缩写,用于在使用D3时减少lambda的数量,其中包括一个标识函数。该库有一个名为“K”的方法,给定一个值,该方法返回一个返回该值的函数。然而,这个库是作为提供函数式编程平台的练习而编写的,所以它有点奇怪。有趣。如果可能的话,我更愿意坚持d3提供的东西。d3不提供这一点。而且,提供了
.identity
。我发现上面的一个限制是,虽然Object(3)
在大多数情况下像3
一样工作,但它没有通过==
测试。“Object
”?在我看来,意思不是很清楚。然后我更喜欢函数(d){return d;}
,因为发生的事情很明显。令人沮丧的是,d3甚至在its中定义了几个标识函数,但只公开标识$5、标识$6和标识$8(分别为geoIdentity、scaleIdentity和zoomIdentity)。不幸的是,只有identity、identity$1、identity$3、identity$4和identity$7是理想的实现。