Javascript d3如何将一组数字转换为代表第一组数字的较大集合

Javascript d3如何将一组数字转换为代表第一组数字的较大集合,javascript,d3.js,Javascript,D3.js,假设我有一个数组[1,2,5,18,17,8],我想把它变成一个长度为40的数组,沿着相同的路径 a = [1,2,5,18,17,8]; stepSize = 1 / (40 / a.length); 然后我想我可以做一些类似的事情 steps = []; for( var i = 0; i < 1; i+= stepSize) { steps.push(d3.interpolate(a[0],a[1])(i)); } steps=[]; 对于(变量i=0;i

假设我有一个数组[1,2,5,18,17,8],我想把它变成一个长度为40的数组,沿着相同的路径

a = [1,2,5,18,17,8];

stepSize = 1 / (40 / a.length);
然后我想我可以做一些类似的事情

steps = [];

for( var i = 0; i < 1; i+= stepSize) {
  steps.push(d3.interpolate(a[0],a[1])(i));
}
steps=[];
对于(变量i=0;i<1;i+=步长){
步进推(d3插值(a[0],a[1])(i));
}

然后对所有元素重复该操作。我的问题是有更好的方法吗?

我只能猜测您真正的问题是什么,但我认为您希望绘制这些值并获得平滑曲线。在这种情况下,使用line.interpolate()

如果您确实知道自己需要什么,并且您的解决方案适合您,请接受以下提示: 不要迭代步长。计算一次,然后在从0到40的每个循环中用i乘以。这样可以解决精度问题

您的算法已清理、测试并运行:

var a = [1,5,12,76,1,2];
var steps = 24;
var ss = (a.length-1) / (steps-1);

var result = new Array(steps);
for (var i=0; i<steps; i++) {
    var progress = ss * i;
    var left = Math.floor(progress);
    var right = Math.ceil(progress);
    var factor = progress - left;
    result[i] = (1 - factor) * a[left] + (factor) * a[right];
    // alternative that actually works the same:
    //result[i] = d3.interpolateNumber(a[left], a[right], factor);
}

console.log(result);
var a=[1,5,12,76,1,2];
var阶数=24;
var ss=(a.长度-1)/(步长-1);
var结果=新数组(步骤);

对于(var i=0;i您所说的“遵循相同的路径”是什么意思?您只是想重复数组吗?
while(steps.length<40){steps.push(a);})
。我希望你能得到最新版本:-D