📅  最后修改于: 2023-12-03 15:40:36.801000             🧑  作者: Mango
在编写程序时,我们需要经常检查输入数值何时上升或下降。这在很多场景中都是很有用的,比如检测股票走势、监控温度变化等。在这里介绍几种常用的方法来检测输入数值的变化趋势。
这是最简单的方法,只需要比较相邻的两个数值即可,如果后一个数值大于前一个数值,则认为数值上升,如果后一个数值小于前一个数值,则认为数值下降。
下面是检查数值数组 arr
变化趋势的示例代码:
function checkTrend(arr) {
if (arr.length < 2) {
return 'insufficient data';
}
let trend;
if (arr[arr.length - 1] > arr[arr.length - 2]) {
trend = 'up';
} else if (arr[arr.length - 1] < arr[arr.length - 2]) {
trend = 'down';
} else {
trend = 'stable';
}
return trend;
}
const arr = [1, 2, 3, 4, 3, 2, 1];
console.log(checkTrend(arr)); // output: 'down'
以上代码中,checkTrend
函数将数组末尾两个数值进行比较,返回 up
、down
或 stable
,表示上升、下降或稳定。
这是一种更为精确的方法,通过计算数值的斜率,可以更好地表达数值变化趋势。当斜率为正数时,表示数值上升,当斜率为负数时,表示数值下降,当斜率为零时,表示数值稳定。
下面是使用斜率检查数值数组 arr
变化趋势的示例代码:
function checkTrend(arr) {
if (arr.length < 2) {
return 'insufficient data';
}
const x = [];
const y = [];
for (let i = 0; i < arr.length; i++) {
x.push(i);
y.push(arr[i]);
}
const sumX = x.reduce((acc, cur) => acc + cur, 0);
const sumY = y.reduce((acc, cur) => acc + cur, 0);
const sumXY = x.reduce((acc, cur, index) => acc + cur * y[index], 0);
const sumX2 = x.reduce((acc, cur) => acc + cur ** 2, 0);
const n = arr.length;
const slope = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX ** 2);
let trend;
if (slope > 0) {
trend = 'up';
} else if (slope < 0) {
trend = 'down';
} else {
trend = 'stable';
}
return trend;
}
const arr = [1, 2, 3, 4, 3, 2, 1];
console.log(checkTrend(arr)); // output: 'down'
以上代码中,checkTrend
函数使用最小二乘法计算输入数值的斜率,再根据斜率的正负来判断数值的变化趋势。
以上两种方法各有优缺点,在实际应用中需要选择合适的方法。比较相邻数值的方法简单易用,适用于数值变化趋势不太复杂的场景;而使用斜率的方法可以更为精确地反映数值变化趋势,适用于数值波动比较大或者变化趋势比较复杂的场景。