如何生成以指定值为初始值按固定步长累加的序列数组
原代码问题说明
- 遍历的数组为固定长度的
[0, 1, 2, 3, 4],无法输出你需要的10个元素的目标数组 - reduce逻辑错误:初始值设置为10000,每次迭代返回固定值1,完全没有按照步长1000累加生成元素的逻辑
- 函数没有返回生成的数组,外部调用拿不到结果
- 传入的参数
i、o完全没有被使用,逻辑硬编码不可复用
正确实现方案
方案1:更简洁的Array.from实现(推荐)
const range = (step: number, max: number): number[] => { const elementCount = Math.floor(max / step); return Array.from({ length: elementCount }, (_, index) => (index + 1) * step); }; // 调用示例 const result = range(1000, 10000); console.log(result); // 输出 [1000, 2000, 3000, ..., 10000]
方案2:基于reduce的实现
如果你希望用reduce逻辑实现,可以参考如下写法:
const range = (step: number, max: number): number[] => { const elementCount = Math.floor(max / step); return new Array(elementCount).fill(0).reduce((accumulator, _, index) => { accumulator.push((index + 1) * step); return accumulator; }, [] as number[]); }; // 调用示例 const result = range(1000, 10000);
扩展说明
如果后续需求中最大值max不是步长step的整数倍,可以自行调整elementCount的计算逻辑,比如需要保留小于max的最大符合规则的元素,就保持现有计算逻辑即可;如果需要向上取整到超过max的第一个符合规则的元素,可以把Math.floor改成Math.ceil。
内容的提问来源于stack exchange,提问作者trickysneak
相关产品推荐
相关产品推荐

