Javascript d3中标识函数(“函数(d){return d;}”)的缩写是什么?

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

查看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")
.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是理想的实现。