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

TypeScript:如何在现有二维数组中插入其他二维数组(避免拷贝)

如何在不创建新数组的前提下扩展二维数组

问题背景

现有二维数组及待插入的两个数组:

let array:number[][] = [
    [5, 6],
];
let a1:number[][] = [[1, 2], [3, 4]];
let a2:number[][] = [[7, 8], [9, 10]];

尝试直接用unshift和push插入整个数组时触发类型错误:

array.unshift(a1);
array.push(a2);

错误提示:

Argument of type 'number[][]' is not assignable to parameter of type 'number[]'.
Type 'number[]' is not assignable to type 'number'.

期望最终数组为:

[
    [1, 2],
    [3, 4],
    [5, 6],
    [7, 8],
    [9, 10]
];

需要找到一种无需逐个遍历元素、且不创建新数组(避免concat这类返回新数组的方法)的实现方式。

解决方案

可以利用展开运算符配合unshift和push实现原数组的直接扩展:

完整代码示例

let array:number[][] = [
    [5, 6],
];
let a1:number[][] = [[1, 2], [3, 4]];
let a2:number[][] = [[7, 8], [9, 10]];

// 将a1的所有子数组插入array开头
array.unshift(...a1);
// 将a2的所有子数组追加到array末尾
array.push(...a2);

console.log(array); // 输出目标结果

原理说明

  • unshift(...a1):展开运算符...会把a1中的每个子数组拆解为独立参数传入unshift,相当于执行array.unshift([1,2], [3,4]),直接在原数组头部添加元素。
  • push(...a2):同理,把a2的每个子数组作为独立参数传入push,直接在原数组尾部追加元素。

这种方式既不需要逐个遍历元素,也不会像concat那样生成新数组,完全在原数组的引用上进行修改,符合需求。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:35:07