JS 合并数组的三大方式

本文详细介绍了在JavaScript中合并数组的两种不可变方法(扩展操作符和concat()函数)以及一种可变方法(push()函数),帮助开发者理解如何高效地在不改变原数组的情况下创建新数组或直接在现有数组中添加元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

数组是表示索引项的有序集合的数据结构。

对多个数组执行的一个常见操作是合并——将2个或多个数组合并成包含合并数组的所有项的更大数组。

例如,有两个数组[1,2]和[5,6],然后合并这些数组得到[1,2,5,6]。

在这篇文章中,你会发现在JavaScript中合并数组的3种方法:2种不可变的(合并后创建一个新数组)和1种可变的(合并到一个数组中)。

1. 数组的不可变合并

1.1使用扩展操作符进行合并

如果您想知道一种在JavaScript中合并数组的好方法,那么请记住使用扩展操作符进行合并。

在数组字面量中写入两个或更多带有扩展操作符前缀的数组,JavaScript将创建一个合并所有这些数组的新数组:

const mergeResult = [...array1, ...array2];

例如,让我们合并两个数组heroes和villains:

const heroes = ['Batman', 'Superman'];
const villains = ['Joker', 'Bane'];

const all = [...heroes, ...villains];

console.info(all); // ['Batman', 'Superman', 'Joker', 'Bane']

const all = [...heros, ...villains] 创建一个合并了heroes和villains数组的新数组。

数组字面量中合并数组的顺序很重要:合并数组中的项按照数组在字面量中出现的顺序插入。

例如,让我们在合并的数组中把villains列表放在heroes列表之前:

const heroes = ['Batman', 'Superman'];
const villains = ['Joker', 'Bane'];

const all = [...villains,  ...heroes];

all; // ['Joker', 'Bane', 'Batman', 'Superman']

扩展操作符方法允许同时合并2个甚至更多数组:

const mergeResult = [...array1, ...array2, ...array3, ...arrayN];

1.2使用array.concat()方法进行合并

如果你喜欢用函数方式合并数组,那么你可以使用array1.concat(array2)方法:

const mergeResult = array1.concat(array2);

或者使用另一种形式:

const mergeResult = [].concat(array1, array2);

array.concat()方法不会改变调用它的数组,而是返回一个具有合并结果的新数组。例如:

const heroes = ['Batman', 'Superman'];
const villains = ['Joker', 'Bane'];

const all1 = heroes.concat(villains);
const all2 = [].concat(heroes, villains);

all1; // ['Batman', 'Superman', 'Joker', 'Bane']
all2; // ['Batman', 'Superman', 'Joker', 'Bane']

heroes.concat(villains)[].Concat (heroes, villains)返回一个新数组,其中heroes和villains数组被合并。

concat方法接受多个数组作为参数,因此你可以一次合并2个或多个数组:

const mergeResult = [].concat(array1, array2, array3, arrayN);

2. 数组的可变合并

使用扩展操作符或array.concat()执行的合并将创建一个新数组。但是,有时不想创建一个新数组,而是想将它合并到一些现有的数组中

下面的方法执行一种可变的合并方法。

2.1使用array.push()方法进行合并

你可能已经知道array.push(item)方法将一个项压入到数组的末尾,改变了调用该方法的数组:

const heroes = ['Batman'];

heroes.push('Superman');

heroes; // ['Batman', 'Superman']

多亏了这个array.push (item1,item2,…, itemN)接受多个项来推入,你可以使用应用于参数的扩展操作符(换句话说,执行合并)来推入整个数组:

array1.push(...array2);

例如,让我们将villains合并到heroes数组中:

const heroes = ['Batman', 'Superman'];
const villains = ['Joker', 'Bane'];

heroes.push(...villains);

heroes; // ['Batman', 'Superman', 'Joker', 'Bane']

heroes.push(…villains)将villains数组中的所有元素推到heroes数组的末尾——执行一个可变的合并操作。heroes数组发生了变化。

总结

JavaScript提供了多种合并数组的方法。

可以使用扩展操作符[…]array1,……Array2],或函数方式[].Concat (array1, array2)合并2个或多个数组。这些方法是不可变的,因为合并结果存储在一个新数组中。

如果你想执行可变合并,即合并到一个数组而不创建一个新数组,那么你可以使用array1.push(…array2)方法。

<think>嗯,用户想了解如何在JavaScript合并数组。首先,我得回忆一下自己知道的数组合并方法。最常见的应该是concat方法,对吧?concat可以合并两个或多个数组,返回一个新数组,原数组不变。比如arr1.concat(arr2),这样就能合并arr1和arr2了。 然后想到ES6的扩展运算符(spread operator),也就是三个点...。用这种方法的话,可以写成[...arr1, ...arr2],同样会生成新数组,原数组也不会被修改。这种方法更简洁,尤其是在合并多个数组的时候,比如[...arr1, ...arr2, ...arr3]。 接下来要考虑的是用户可能想要修改原数组的情况。这时候可能需要使用push方法。不过push如果直接使用arr1.push(arr2)的话,会把arr2作为一个元素添加到arr1里,导致二维数组。所以需要用apply来展开,比如Array.prototype.push.apply(arr1, arr2),这样arr2的元素会被逐个添加到arr1中。不过这种方法在数组很大时可能会有性能问题,因为参数有长度限制。 然后,用户可能会关心不同方法的区别,比如是否需要改变原数组,或者是否需要创建新数组。比如concat和扩展运算符不改变原数组,而push.apply会改变第一个数组。这时候需要分点说明,让用户清楚每种方法的适用场景。 另外,可能要考虑兼容性问题。concat方法兼容性很好,几乎所有浏览器都支持,而扩展运算符是ES6的特性,可能在旧版浏览器中不支持,比如IE。push.apply的方法在ES5中可用,但大数组可能会有栈溢出问题,需要注意。 用户可能的应用场景是什么?比如合并多个数组,或者在循环中动态合并,或者需要保持原数组不变。这时候需要举一些例子,比如合并两个数组,或者合并多个数组的不同写法,或者需要修改原数组的情况下的处理。 可能还需要提到其他方法,比如使用循环逐个添加元素,但这种方法效率不高,一般推荐使用内置方法。或者使用Array.prototype.push配合扩展运算符,比如arr1.push(...arr2),这样也可以直接修改arr1,并且更直观,但同样属于ES6语法。 有没有性能方面的比较?concat和扩展运算符在大多数情况下性能差不多,而push.apply在处理大数组时可能会有问题。所以推荐在不需要改变原数组时使用concat或扩展运算符,需要改变原数组时用push加扩展运算符或者apply。 总结一下,应该分点列出不同的方法,说明它们的语法、是否改变原数组、兼容性以及示例代码。同时提醒用户注意方法的适用场景和潜在问题,比如大数组或浏览器兼容性。</think>在 JavaScript合并数组有几种常用方法,以下是详细说明及示例: ### 1. `concat()` 方法(不修改原数组) ```javascript const arr1 = [1, 2]; const arr2 = [3, 4]; const merged = arr1.concat(arr2); // arr1 → [1,2] arr2 → [3,4] // merged → [1,2,3,4] ``` ### 2. 扩展运算符(ES6+,不修改原数组) ```javascript const arr1 = [1, 2]; const arr2 = [3, 4]; const merged = [...arr1, ...arr2]; // 也可合并多个数组:[...arr1, ...arr2, ...arr3] ``` ### 3. `push()` 方法(修改原数组) ```javascript const arr1 = [1, 2]; const arr2 = [3, 4]; arr1.push(...arr2); // ES6写法 // 或 Array.prototype.push.apply(arr1, arr2);(ES5写法) // arr1 → [1,2,3,4] ``` ### 对比总结: | 方法 | 修改原数组 | 返回值 | 兼容性 | |--------------------|------------|----------------|-------------| | `concat()` | ❌ | 新数组 | 全浏览器 | | 扩展运算符 | ❌ | 新数组 | ES6+ | | `push()` | ✅ | 新数组长度 | ES5/ES6 | ### 注意事项: 1. 超大数组(超过约10万元素)慎用 `apply()`,可能触发调用栈溢出 2. 浅拷贝特性:合并后的数组元素是原数组元素的引用 3. 推荐优先使用 `concat()` 或扩展运算符保持代码简洁性 实际开发中推荐: ```javascript // 需要新数组时 const newArray = oldArray.concat(addItems); // 需要修改原数组时 oldArray.push(...newItems); ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蟹蟹蟹风流

期望和你分享一杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值