Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关于d3.interpoleobject的混淆_Javascript_D3.js_Javascript Objects_Linear Interpolation - Fatal编程技术网

Javascript 关于d3.interpoleobject的混淆

Javascript 关于d3.interpoleobject的混淆,javascript,d3.js,javascript-objects,linear-interpolation,Javascript,D3.js,Javascript Objects,Linear Interpolation,我只是在调查这个问题,我注意到一些奇怪的行为。然而,我对D3不是很熟悉,所以我可能只是误解了一些东西。给定以下数据和插值函数: var a = {"Country": "Ireland", "Year": 2010, "Data": 10}; var b = {"Country": "Ireland", "Year": 2015, "Data": 50}; var iFunc = d3.interpolateObject(a, b); 以下结果与预期一致: console.log(iFunc

我只是在调查这个问题,我注意到一些奇怪的行为。然而,我对D3不是很熟悉,所以我可能只是误解了一些东西。给定以下数据和插值函数:

var a = {"Country": "Ireland", "Year": 2010, "Data": 10};
var b = {"Country": "Ireland", "Year": 2015, "Data": 50};

var iFunc = d3.interpolateObject(a, b);
以下结果与预期一致:

console.log(iFunc(0.2)) // Returns: { Country: "Ireland", Year: 2011, Data: 18 }
console.log(iFunc(0.4)) // Returns: { Country: "Ireland", Year: 2012, Data: 26 }
但是,当两个函数调用都包含在同一个控制台日志中时,如下所示:

console.log(iFunc(0.2), iFunc(0.4)) 
输出仅为第二个对象两次:

{ Country: "Ireland", Year: 2012, Data: 26 } { Country: "Ireland", Year: 2012, Data: 26 }
并且,当函数调用放在数组中时,如下所示:

console.log([iFunc(0.2), iFunc(0.4)])
前一个输出乘以2:

[{ Country: "Ireland", Year: 2014, Data: 42 }, { Country: "Ireland", Year: 2014, Data: 42 }]
这是怎么回事

我之所以要研究这个问题,是因为我想使用以下方法创建一系列中间对象:

var iVals = d3.range(0, 1, 0.2).map( iFunc );

如果有人能告诉我如何做到这一点,我将非常感激

这是一个有趣的问题。可以在自己的文档中找到解释:

注意:未创建模板对象的防御副本;修改返回对象可能会对插值器的后续计算产生不利影响。出于性能原因,未制作副本;插值器通常是动画过渡的内部循环的一部分。(强调矿山)

如您所见,如果使用相同的插值器,您会得到所描述的奇怪结果(打开浏览器的控制台,不要使用代码段的控制台):

var a={
“国家”:“爱尔兰”,
“年份”:2010年,
“数据”:10
};
变量b={
“国家”:“爱尔兰”,
“年份”:2015年,
“数据”:50
};
var iFunc=d3.插值对象(a,b);
var iVals=d3.范围(0,1,0.2).map(iFunc);
console.log(iVals)