JavaScript中将单个for循环拆分为3/4层嵌套循环的实现方法
实现思路
你当前的两层循环是将连续序列按10为步长分层拆分,核心逻辑是把最终输出的数值 n = 第一层数值 * 10 + 第二层数值。如果要拆为3层/4层,只需要按10的幂次依次叠加层级即可,公式对应为:
- 3层:
n = i * 100 + j * 10 + k - 4层:
n = i * 1000 + j * 100 + k * 10 + l
3层循环实现示例
console.config({ maxEntries: Infinity }); let q = 100; // 第一层:每100个为一大组 const layer1Size = 100; const layer1Count = q % layer1Size === 0 ? q / layer1Size : Math.floor(q / layer1Size) + 1; for (let i of [...Array(layer1Count).keys()]) { // 第二层:每10个为一中组 const layer2Size = 10; const maxLayer2Total = Math.min(layer1Size, q - i * layer1Size); const layer2Count = maxLayer2Total % layer2Size === 0 ? maxLayer2Total / layer2Size : Math.floor(maxLayer2Total / layer2Size) + 1; for (let j of [...Array(layer2Count).keys()]) { // 第三层:单个元素 const maxLayer3Total = Math.min(layer2Size, maxLayer2Total - j * layer2Size); for (let k of [...Array(maxLayer3Total).keys()]) { console.log(i * layer1Size + j * layer2Size + k); } } }
.as-console-wrapper { max-height: 100% !important; }
4层循环实现示例
只需要再叠加一层千位分组即可,逻辑完全一致:
console.config({ maxEntries: Infinity }); let q = 1500; // 可调整数值测试效果 // 第一层:每1000个为一大组 const layer1Size = 1000; const layer1Count = q % layer1Size === 0 ? q / layer1Size : Math.floor(q / layer1Size) + 1; for (let i of [...Array(layer1Count).keys()]) { // 第二层:每100个为一中组 const layer2Size = 100; const maxLayer2Total = Math.min(layer1Size, q - i * layer1Size); const layer2Count = maxLayer2Total % layer2Size === 0 ? maxLayer2Total / layer2Size : Math.floor(maxLayer2Total / layer2Size) + 1; for (let j of [...Array(layer2Count).keys()]) { // 第三层:每10个为一小组 const layer3Size = 10; const maxLayer3Total = Math.min(layer2Size, maxLayer2Total - j * layer2Size); const layer3Count = maxLayer3Total % layer3Size === 0 ? maxLayer3Total / layer3Size : Math.floor(maxLayer3Total / layer3Size) + 1; for (let k of [...Array(layer3Count).keys()]) { // 第四层:单个元素 const maxLayer4Total = Math.min(layer3Size, maxLayer3Total - k * layer3Size); for (let l of [...Array(maxLayer4Total).keys()]) { console.log(i * layer1Size + j * layer2Size + k * layer3Size + l); } } } }
.as-console-wrapper { max-height: 100% !important; }
如果你需要自定义每层的分组大小,只需要修改对应layerXSize的数值即可,不需要固定为10的倍数。
内容的提问来源于stack exchange,提问作者Buğra Gündüz
相关产品推荐
相关产品推荐

