使数组内的值平均以平滑图形线

时间:2016-11-23 17:11:03

标签: javascript arrays sorting

我有array代表具有不同值的图表的点,如下所示:

var array = [5, 3, 4, 1, 2];

我想循环遍历它并创建一个新数组,其中新值为:

  • 它之前的值与之后的值之间的平均值。
  • 放在现有的。

这意味着array[0]将保持在同一位置,而其他值将被推到一个位置。新数组应如下所示:

var newArray = [5, 4, 3, 3.5, 4, 2.5, 1, 1.5, 2];

您对如何实现这一目标有所了解吗?在此先感谢您的回复!

6 个答案:

答案 0 :(得分:2)

var array = [5, 3, 4, 1, 2];
var newArr = [array[0]]; // start the array with the first from the original

array.reduce((a, b) => {
  newArr.push((a + b) / 2, b);
  return b;
});

console.log(newArr);

答案 1 :(得分:1)

var array = [5, 3, 4, 1, 2];

var newArray = [];
newArray.push(array[0]);

for(var i=0; i < array.length-1; i++)
{
  var first = array[i];
  var second = array[i+1];
  var avg = (first+second)/2;
  newArray.push(avg);
  newArray.push(second);
}

https://jsfiddle.net/5utkvge8/

答案 2 :(得分:1)

您将要遍历原始数组,将每个数字推送到新数组,如果您不在最终元素上,请获得array[i]array[i+1]的平均值

var array = [5, 3, 4, 1, 2];
var newArray = [];

for (var i = 0; i < array.length; i++)
{
  newArray.push(array[i])
  if (!isNaN(array[i+1])) 
  {
    newArray.push((array[i] + array[i+1]) / 2)
  }
}

答案 3 :(得分:1)

或以功能性,无副作用的方式:

var array = [5, 3, 4, 1, 2];
var newArray = array.reduce((result, value, index, array) => result.concat(index > 0 && index < array.length ? [(array[index-1] + value)/2, value] : value), [])

答案 4 :(得分:1)

如果您可以修改原始数组:

&#13;
&#13;
var array = [5, 3, 4, 1, 2],
  len = array.length * 2 - 2;

for (var i = 1; i < len; i = i + 2) {
  array.splice(i, null, (array[i-1] + array[i]) / 2);
}

console.log(array);
&#13;
&#13;
&#13;

答案 5 :(得分:0)

let createdArr = [] 
[5, 3, 4, 1, 2].forEach( (item,index,arr) => {
   createdArr.push(item)
   if( index !== 0 && index + 1 !== arr.length ){
      createdArr.push( (item + arr[ index + 1]) / 2 )
   }
} )