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