我需要提取正弦数组的所有峰值,这意味着所有的高值和低值。波浪不停地上下起伏,如下:
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];
数组中的数据是随机的,可以随意启动或停止。与之前的值进行简单比较是不够的,因为行中的下一个值可以更高或更低。数字可以是负数或正数。
答案 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>