簡體   English   中英

Javascript:正弦波模式的高峰和低峰

[英]Javascript: High and low peaks of sinusoidal pattern

我需要提取正弦數組的所有峰,即所有高值和低值。 浪潮不斷地上下波動,像這樣:

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

以下打印出了高峰和低峰:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM