collection/range.jsjavascript
/**
* 生成一个不包含终点的等差数列。
* @function range
* @memberof module:collection
* @param {number} start 起点;仅传一个参数时该参数作为终点且起点为 0
* @param {number} [end] 终点
* @param {number} [step] 步长,省略时根据方向自动取 1 或 -1
* @returns {number[]} 数列数组
* @throws {TypeError|RangeError} 参数不是有限数值或步长为零时抛出
*/
function range(start = 0, end, step) {
if (end === undefined) [start, end] = [0, start]
if (![start, end].every(Number.isFinite)) throw new TypeError('start and end must be finite numbers')
if (step === undefined) step = start < end ? 1 : -1
if (!Number.isFinite(step) || step === 0) throw new RangeError('step must be a non-zero finite number')
const result = []
const ascending = step > 0
for (let value = start; ascending ? value < end : value > end; value += step) result.push(value)
return result
}
export default range