JS:将数组中的null值替换为上一个和下一个值的平均值

时间:2015-11-11 18:00:18

标签: javascript arrays

如果我有以下数组

[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]

2 个答案:

答案 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;
}