此函数找到大于值的间隙,用相邻值的平均值填充它并返回新数组。
我需要重复此函数,直到在示例5中没有大于间隙值的间隙。
如果没有空隙,我该如何重复此功能?
var chain = [0,2,6,44,70]
function fillgaps(chain,gap){
var len = chain.length
for(i=1;i<len;i++){
var g = chain[i]-chain[i-1]
if(g>gap){
var avrg = (chain[i]+chain[i-1])/2
chain.splice(i,0,avrg)
var len = 0
}
}
return chain
}
var test = fillgaps(chain,5)
console.log(chain)
答案 0 :(得分:2)
您可以使用结果数组的最后一项和实际项来减少数组,并使用函数来检查间隙。
如果找到间隙,则使用平均值扩展阵列并再次检查间隙。
function fillgaps(chain, gap) {
const
iter = a => a.reduce((r, v) => r && r.concat(fill(r.pop(), v)) || [v], undefined),
fill = (a, b) => gap + a < b ? iter([a, (a + b) / 2, b]) : [a, b];
return iter(chain);
}
var chain = [0, 2, 6, 44, 70],
result = fillgaps(chain, 5);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:1)
您不必再次调用整个功能。而是将索引放回一点并让它从那里继续,因此它将重新评估引入的新间隔:
function fillgaps(chain,gap){
var len = chain.length
for(i=1;i<len;i++){
var g = chain[i]-chain[i-1]
if(g>gap){
var avrg = (chain[i]+chain[i-1])/2;
chain.splice(i,0,avrg);
len++;
i--;
}
}
return chain;
}
var chain = [0,2,6,44,70];
var test = fillgaps(chain,5)
console.log(test)