重复一个函数将值拼接到一个数组中,直到满足条件

时间:2018-01-11 19:50:55

标签: javascript arrays

此函数找到大于值的间隙,用相邻值的平均值填充它并返回新数组。

我需要重复此函数,直到在示例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)

2 个答案:

答案 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)