【发布时间】:2018-09-14 21:40:18
【问题描述】:
我正在尝试生成 2 个整数序列:一个是相邻值的差异稳定增加,另一个是差异稳定减少。
所需输出示例:
递增递增:[1, 3, 6, 10, 15]
随着差异的增加而下降:[15, 13, 10, 6, 1]
递增递减差值:[1, 6, 10, 13, 15]
递减差值:[15, 10, 6, 3, 1]
下面的代码 sn-p 生成一个数组,其中相邻值的差异稳步增加(但尚未考虑停止值输入)。我坚持使用正确的数学方法来创建一个类似的数组,其中相邻值的差异稳步减小。
const ranger = (start = 0, stop = 0, len = 1) => {
const d = (start <= stop) ? 1 : -1;
const step = Math.round(Math.abs(stop - start) / len);
const arr = Array.from(Array(len), (x, i) => i + 1)
.map((x) => (x !== 1) ? Math.round(start + d * x * step * (x / len)) : start);
return arr;
};
console.log('asc', ranger(5, 100, 10));
console.log('desc', ranger(100, 5, 10));
【问题讨论】:
-
你期望
ranger(5, 100, 10)的输出是什么? -
@FrankFajardo ranger(5, 100, 10) 所需的输出将是一个从 5 到 100 递增的 10 个整数的数组,其中相邻值之间的差异随着每一步而减小 - 与当前代码相反正在做的地方是值的差异随着每一步而增加。
-
我不太确定您所说的差异在哪里......随着每一步而减小。第一步的差异应该从一个开始吗?您的示例输出和代码中没有模式。代码的输出是
[5, 9, 14, 21, 30, 41, 54, 69, 86, 105]对应于ranger(5, 100, 10)。所以我不确定为什么第一个差距从 4 开始(5 和 9 之间的差距)。此外,您的代码生成的[1, 3, 6, 11, 16](对于ranger(1, 15, 5))与您的示例输出不同。 -
@FrankFajardo 你是对的,示例中没有特定的模式,因为函数必须改变进程以处理具有不同开始、停止和长度的范围。这些示例只是为了显示增加和减少的差距,但答案不必在示例中产生完全相同的输出。
标签: javascript arrays range sequence