You need to enable JavaScript to run this app. JavaScript 多数组交错合并实现(支持非等长补位)
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript 多数组交错合并实现(支持非等长补位)

通用二维嵌套数组交错合并实现修正

现有实现的核心问题

当前代码仅能处理2个内层数组的场景,本质是两个逻辑层面的缺陷:

  • 硬编码绑定双数组取值:在完成数组对齐补位后的遍历环节,代码固定只从第1、2个内层数组中读取同索引位置的元素推入结果集,完全没有遍历其余内层数组的逻辑,只要内层数组数量超过2,对应元素就会被完全漏掉。
  • 补位判断存在笔误:补位函数中的判断条件if (arr != maxLength)有明显逻辑问题,arr是数组对象,和数字类型的maxLength永远不可能相等,这个判断属于完全冗余的无效代码,虽然不影响后续while循环的补位效果,但属于容易误导后续维护的低级错误。

修正后的通用版本

核心调整遍历逻辑,不再固定读取特定下标的内层数组,而是针对每一个对齐后的索引位,按顺序取所有内层数组的对应值推入结果集,同时修正补位函数的笔误,还可以移除原代码里查找最长数组位置的冗余逻辑——求最长数组长度不需要定位最长数组的具体下标,直接对所有内层数组的长度取最大值即可,减少不必要的数组遍历。

function interleave(...masterArray) {
  let rtnArray = [];
  // 空输入边界处理
  if (masterArray.length === 0) return rtnArray;
  
  // 直接计算所有内层数组的最大长度,替代原冗余的getLongestArray逻辑
  let longestInnerArrayLength = Math.max(...masterArray.map(arr => arr.length)); 
  padAllArraysToSameLength(masterArray, longestInnerArrayLength); 
  
  // 按索引逐位遍历,依次取所有内层数组的对应值
  for (let index = 0; index < longestInnerArrayLength; index++) {
    masterArray.forEach(innerArr => {
      rtnArray.push(innerArr[index]);
    })
  }

  return rtnArray;
}

function padAllArraysToSameLength(masterArray, maxLength) {
  return masterArray.forEach(arr => {
    // 修正原笔误:判断数组长度是否和目标长度一致
    if (arr.length !== maxLength) {
      while(arr.length !== maxLength) {
        arr.push(null);
      }
    }
  })
}

覆盖场景验证

修正后的实现可以适配所有规则要求的场景:

  • 双数组等长输入:interleave([1,2,3], ['c','d','e']) 输出 [1, 'c', 2, 'd', 3, 'e'],匹配基础合并规则
  • 双数组不等长输入:interleave([1,2,3], [4,5]) 输出 [1,4,2,5,3,null],匹配null补位规则
  • 三数组等长输入:interleave([1,2,3], [4,5,6], [7,8,9]) 输出 [1,4,7,2,5,8,3,6,9],满足多数组合并需求
  • 多数组不等长输入:interleave([1,2], [3], [4,5,6,7]) 先将所有数组补位对齐到长度4,最终输出[1,3,4,2,null,5,null,null,6,null,null,7],符合非等长处理逻辑

内容的提问来源于stack exchange,提问作者hello world

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 12:54:04