JavaScript嵌套数组按规则分块 首块自定义长度其余保留原长度
实现方案
你可以先把所有元素按原始顺序拍平,再结合原始子数组的长度作为默认规则分配元素,仅需传入需要调整的位置的自定义规则即可,不需要提前配置所有子数组的长度。
代码实现
function adjustSubarrays(originalArray, customRules = {}) { // 按原有顺序展开所有元素,保证原始值完整保留 const allElements = originalArray.flat(); // 直接提取原数组各子数组的长度作为默认长度,无需手动配置 const defaultLengths = originalArray.map(subArr => subArr.length); const result = []; let currentPos = 0; // 除最后一个子数组外,其余按规则取对应长度的元素 for (let i = 0; i < defaultLengths.length - 1; i++) { const takeLength = customRules[i] ?? defaultLengths[i]; result.push(allElements.slice(currentPos, currentPos + takeLength)); currentPos += takeLength; } // 最后一个子数组收纳所有剩余元素 if (currentPos < allElements.length) { result.push(allElements.slice(currentPos)); } return result; }
调用示例
const myArray = [[1, 2, 3, 4], [5, 6], [7, 8, 9], [10]]; // 仅需传入要调整的第一个子数组的长度规则即可 const adjusted = adjustSubarrays(myArray, {0: 2}); console.log(adjusted); // 输出:[[1,2], [3,4], [5,6,7], [8,9,10]]
方案说明
- 自动提取原数组的子数组长度作为默认规则,无需提前知晓所有子数组的元素数量,仅需传入需要修改的位置的长度规则
- 先拍平再分配的逻辑避免了跨子数组移动元素的复杂处理,保证所有原始值完整保留
- 自动将剩余元素全部归入最后一个子数组,符合需求中“除最后一个子数组外其余保持长度”的要求
内容的提问来源于stack exchange,提问作者Aleks Per
相关产品推荐
相关产品推荐

