如果我有以下数组
[5,2,null,5,9,4]
我需要将null
替换为上一个和下一个值(2和5)的平均值。像这样:
[5,2,3.5,5,9,4]
此外,如果我有一个连续空值的数组:
[5,2,null,null,9,4]
我希望能够用2到9之间的步长值替换它们。像这样:
[5,2,4.33,6.63,9,4]
编辑:伙计们,完全不是家庭作业。我正在尝试使用Chartist-js库做一些事情。
这就是我所拥有的用于将null替换为之前和之后的值的方法。
var seriesData = [5,2,null,5,null,4]
seriesData.forEach(function(value, index){
if ( value === null ) {
var prev = seriesData[index - 1];
var next = seriesData[index + 1];
seriesData[index] = (prev + next) / 2;
}
});
=> [5, 2, 3.5, 5, 4.5, 4]
答案 0 :(得分:1)
这解决了您的第一个问题:
var arr = [5, 2, null, 5, 9, 4];
var result = arr
.map(function (x) {
if (x == null) {
return (arr[arr.indexOf(x) - 1] + arr[arr.indexOf(x) + 1]) / 2 ;
}
return x;
});
console.log(result); // [5, 2, 3.5, 5, 9, 4]
对于第二个问题,我不太明白你对这两个步骤的意思。
答案 1 :(得分:1)
这听起来像是图表问题,所以这里有一个粗略的逻辑,你可以轻松改进代码:
function test(){
var arr = [5,3,2,null,null,9,4, null, null, null, 10, null, 12],
ind = -1,
prevIndex,
nJumps, valJump;
for( var currIndex = 0; currIndex< arr.length; currIndex++ ){
if( arr[ currIndex] == null ){
continue;
}else if( prevIndex === undefined || (nJumps = (currIndex- prevIndex)) === 1 ){
prevIndex = currIndex;
continue;
}
valJump = (( arr[ currIndex ] - arr[ prevIndex ]) / nJumps);
ind = (+prevIndex);
while( ++ind < (+currIndex) )
arr[ ind ] = (arr[ ind-1 ]) + valJump;
prevIndex = currIndex;
}
return arr;
}