如何在JavaScript中按特定规律生成包含10的倍数的数字序列?
实现指定规律的数字序列(JavaScript)
我来分享几个符合你需求的实现方案,完全匹配你描述的序列规律:
思路拆解
这个序列的核心规律可以分成两个部分:
- 初始段:直接输出1到10的连续整数;
- 循环扩展段:从量级10开始,依次生成
2*量级到9*量级的数,随后输出量级*10作为下一个量级的基准,不断重复这个逻辑。
方案1:生成器函数(按需生成,适合无限序列)
如果需要处理无限延伸的序列,或者不想一次性生成所有值占用内存,用ES6的生成器函数是最佳选择:
function* generateSpecialSequence() { // 输出初始的1-10 for (let num = 1; num <= 10; num++) { yield num; } // 循环生成后续的量级序列 let currentScale = 10; while (true) { // 生成2*currentScale 到 9*currentScale for (let multiplier = 2; multiplier <= 9; multiplier++) { yield multiplier * currentScale; } // 升级到下一个量级并输出 currentScale *= 10; yield currentScale; } }
使用示例
比如要获取前30个序列值:
const generator = generateSpecialSequence(); const first30Items = Array.from({ length: 30 }, () => generator.next().value); console.log(first30Items); // 输出结果:[1,2,3,4,5,6,7,8,9,10,20,30,40,50,60,70,80,90,100,200,300,400,500,600,700,800,900,1000,2000,3000]
方案2:生成到指定最大值的序列
如果只需要生成到某个具体的上限值(比如5000),可以用这个函数:
function generateSequenceUpTo(maxLimit) { const sequence = []; // 处理初始段1-10 for (let num = 1; num <= 10; num++) { if (num > maxLimit) break; sequence.push(num); } if (10 >= maxLimit) return sequence; // 处理后续量级段 let currentScale = 10; while (true) { // 生成2到9倍当前量级的数 for (let multiplier = 2; multiplier <= 9; multiplier++) { const num = multiplier * currentScale; if (num > maxLimit) return sequence; sequence.push(num); } // 升级量级并检查是否超限 currentScale *= 10; if (currentScale > maxLimit) return sequence; sequence.push(currentScale); } }
使用示例
// 生成到5000的序列 const upTo5000 = generateSequenceUpTo(5000); console.log(upTo5000); // 输出会包含到5000的所有符合规律的数值
内容的提问来源于stack exchange,提问作者mx_code
相关产品推荐
相关产品推荐

