Javascript:正弦曲线图案的高低峰

时间:2016-09-20 16:20:40

标签: javascript arrays

我需要提取正弦数组的所有峰值,这意味着所有的高值和低值。波浪不停地上下起伏,如下:

var wave = [2, 4, 2, -1, -3, -1, 2, 4, 6, 9, 7, 6, 5, 1, 4, 6, 9, 6, 4 , 2, 3, 4, 5, 4];  

数组中的数据是随机的,可以随意启动或停止。与之前的值进行简单比较是不够的,因为行中的下一个值可以更高或更低。数字可以是负数或正数。

2 个答案:

答案 0 :(得分:1)

完美的问题。差别是必不可少的。这应该这样做;



var wave = [2, 4, 2, -1, -3, -1, 2, 4, 6, 9, 7, 6, 5, 1, 4, 6, 9, 6, 4 , 2, 3, 4, 5, 4],
   peaks = wave.reduce((p,c,i,a) => p.concat(c-(a[i-1] || 0)) ,[])
               .reduce((p,c,i,a) => Math.sign(c) !== (Math.sign(a[i+1]) || Math.sign(c)) ? p.concat(i) : p,[])
               .map(e => wave[e]);
console.log(peaks);




答案 1 :(得分:0)

以下打印出高峰和低峰:

<!DOCTYPE HTML>
<html>
<head></head>
<body>
<script>

    var wave = [2, 4, 2, -1, -3, -1, 2, 4, 6, 9, 7, 6, 5, 1, -4, 6, 9, 6, 4 , 2, 3, 4, 5, 4];

    var high = new Array();
    var low = new Array();
    var asc = false;
    var prev = wave[0];

    for (i = 1; i < wave.length; i++) 
    {
        if (wave[i] > prev && asc == false) {
            asc = true;
            low.push(prev);
        }
        if (wave[i] < prev && asc == true) {
            asc = false;
            high.push(prev);
        }
        prev = wave[i];     
    }

    console.log('Low Values: ' + low.toString()); //Low Values: 2,-3,1,2
    console.log('High Values: ' + high.toString()); //High Values: 4,9,9,5

</script>
</body>
</html>