2016-11-23 58 views
2

我有一个array表示类似以下具有不同值的曲线图的点:制作平均内部阵列以平滑图线

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

我想通过它循环,并创建一个新的数组新值如下:

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

这意味着array[0]将保持在相同位置,而其他值将被推到一个位置。新的数组应该看起来像这样:

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

你有关于如何实现这个想法吗?在此先感谢您的回复!

+1

请出示了哪些工作你已经完成了。代码将是最好的。 – mangotang

+0

如果您在答案中找到解决方案,请务必将其标记为正确。 – Howzieky

回答

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
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/

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) 
    } 
} 
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) 
    } 
}) 
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), []) 
1

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

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);