You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向二维数组添加数据以得到预设的目标结果

输入与预期结果

给定输入

const first = 50;
const second = [[14, 16], [28, 30]];

预期输出

const expectedResult = [[0, 13], [14, 16], [17, 27], [28, 30], [31, 50]];

当前问题代码

const first = 50;
const second = [[14, 16], [28, 30]].flat(1);

let result = [];
for(let i = 0; i < second.length; i++) {
   let temp = second[i];
   if (i === 0) {
     result.push([i, temp - 1]);
   }
   result.push([i+temp, temp+2]);
}

console.log(result); // 输出 [[0, 13], [14, 16], [17, 18], [30, 30], [33, 32]]

问题分析与修复方案

原代码的核心问题是将二维区间数组扁平化后,遍历单个数值时逻辑混乱,错误计算了区间的起始与结束值。正确逻辑应基于原始区间数组,依次补全区间前后的空白部分:

  1. 补全第一个区间之前的空白:从0到第一个区间起始值减1
  2. 直接加入每个原始区间
  3. 补全当前区间与下一个区间之间的空白:当前区间结束值加1到下一个区间起始值减1
  4. 补全最后一个区间到first的空白:最后一个区间结束值加1到first

正确代码

const first = 50;
const second = [[14, 16], [28, 30]];

const result = [];

// 处理第一个区间之前的部分
if (second[0][0] > 0) {
  result.push([0, second[0][0] - 1]);
}

// 遍历区间,补全区间间的空白
for (let i = 0; i < second.length; i++) {
  // 添加当前区间
  result.push(second[i]);
  
  // 非最后一个区间时,补全到下一个区间的空白
  if (i < second.length - 1) {
    const currentEnd = second[i][1];
    const nextStart = second[i+1][0];
    // 仅当区间有效时添加
    if (currentEnd + 1 <= nextStart - 1) {
      result.push([currentEnd + 1, nextStart - 1]);
    }
  }
}

// 处理最后一个区间到first的部分
const lastEnd = second[second.length - 1][1];
if (lastEnd + 1 <= first) {
  result.push([lastEnd + 1, first]);
}

console.log(result); // 输出 [[0,13],[14,16],[17,27],[28,30],[31,50]]

逻辑说明

  • 增加有效性判断:避免出现[0,-1]或[17,16]这类无效区间
  • 基于原始二维区间数组处理,无需扁平化,保证区间的完整性
  • 分步处理首尾和区间间的空白,逻辑清晰且覆盖所有场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 05:40:37