📜  检查输入数值何时上升或下降 - Javascript (1)

📅  最后修改于: 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 函数将数组末尾两个数值进行比较,返回 updownstable,表示上升、下降或稳定。

方法二:使用斜率

这是一种更为精确的方法,通过计算数值的斜率,可以更好地表达数值变化趋势。当斜率为正数时,表示数值上升,当斜率为负数时,表示数值下降,当斜率为零时,表示数值稳定。

下面是使用斜率检查数值数组 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 函数使用最小二乘法计算输入数值的斜率,再根据斜率的正负来判断数值的变化趋势。

结论

以上两种方法各有优缺点,在实际应用中需要选择合适的方法。比较相邻数值的方法简单易用,适用于数值变化趋势不太复杂的场景;而使用斜率的方法可以更为精确地反映数值变化趋势,适用于数值波动比较大或者变化趋势比较复杂的场景。