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

对多个数组执行的一个常见操作是合并——将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)方法。

JS 合并数组的三大方式相关推荐

  1. JS遍历数组的多种方式

    JS遍历数组的多种方式 1. 普通for循环 for (let i = 0; i < arr.length; i++){//code} 应用最为普遍的循环写法,性能好,可读性好. 2. 优化版f ...

  2. js合并对象和js合并数组

    js合并对象 Object.assign(target,xxx,xxx,...)  :将所有可枚举属性的值从一个或多个源对象复制到目标对象 assign<T, U, V>(target: ...

  3. js实现数组去重的方式(7种)

    目录 JS数组去重的方式 1.利用Set()+Array.from() 2.利用两层循环+数组的splice方法 3.利用数组的indexOf方法 4.利用数组的includes方法 5.利用数组的f ...

  4. JS创建数组的常用方式及遍历总结

    参考链接 js数组遍历和对象遍历 JS创建数组的三种方法 数组的常用创建方式 //方式1 隐式创建数组var arr1 = ["value1","value2" ...

  5. js合并数组里面的对象数据,弱合并。

    说明:该方法时通过冒泡方法使用Object.keys方法对数据合并的. /* 合并数组数据 data为数组源数据组 str为需要合并的相叠加的数据 arr数据是不参于比较的数据名称 way是合并方式, ...

  6. JS合并数组 对象

    合并数组使用concat 合并对象使用Object.assign // 合并两个数组 --- 如果参数为空 返回副本 不是引用let arr1 = ['red', 'green', 'blue']le ...

  7. js 合并数组对象,相同键的求和。合并数组对象中的相同项,并统计数量和

    代码: var list=[{price:1000,amount:1 },{price:1500,amount:3 },{price:1000,amount:1 },{price:1200,amoun ...

  8. PHP合并数组几种方式总结及数组去重

    今天在做项目的时候,想将多个数组进行去重合并的操作.在此前合并数组我一直用的是array_merge()这个函数,今天我百度了一下,原来还有'+'号,和array_merge_recursive函数. ...

  9. JS合并数组的几种方式?

    目录标题 1.concat合并的方式 2.ES6解构 3.遍历添加的方式 4.join & split 5.解构添加 6.splice解构 7.apply 8.call 1.concat合并的 ...

最新文章

  1. PHP函数学习nl2br(),strlen(),mb_strlen()
  2. 关于[UITableView setEditing:YES animated:YES] 没有animation
  3. 键盘定位板图纸_聊聊机械键盘的结构
  4. SQL UPDATE with INNER JOIN
  5. Oracle 优化和性能调整
  6. 10个经典的哲学小故事
  7. 小米12系列或首发2亿像素主摄:配原生1英寸超大底
  8. 60-179-024-使用-TypeInfo-Flink类型系统TypeIinformation
  9. c语言牛顿方法,C语言编写牛顿迭代法的跟踪
  10. model Ensemble
  11. 创建可扩展性系统-13-2
  12. Atitit 签名规范 attilax总结 安全签名规范 v2 r99.docx
  13. 上传淘宝网图片获取相似商品信息
  14. mysql中year()_MySQL year()函数
  15. Windows 写入缓存
  16. 仿写天猫tmall首页
  17. 考研词汇测试软件,考研有哪些好用的背单词APP神器
  18. 云服务器怎么配置cpu与内存搭配
  19. Java8新特性stream流的优雅操作
  20. write-back与Write-through

热门文章

  1. 多米尼加共和国商标注册
  2. windows设置共享盘
  3. Unity性能优化教程
  4. [网络安全]中间人攻击
  5. 【TFS-CLUB社区 第6期赠书活动】〖uni-app跨平台开发与应用从入门到实践〗等你来拿,参与评论,即可有机获得
  6. 2021-04-06面试题2
  7. 成都榆熙教育咨询有限公司:就其他电商平台而言,在拼多多开店会有哪些优势?
  8. php手绘功能,Canvas的手绘风格图形库Rough.js
  9. C#五种线程安全的单例模式(Lazy、双重校验、静态内部类、CAS、静态只读字段)
  10. Ubuntu 20.04 打开WPS时间过长解决办法