探讨JS合并两个数组的方法

转载自  探讨JS合并两个数组的方法

我们在项目过程中,有时候会遇到需要将两个数组合并成为一个的情况。

比如:

var a = [1,2,3];
var b = [4,5,6];

有两个数组a、b,需求是将两个数组合并成一个。方法如下:

1、concat

js的Array对象提供了一个叫concat()方法,连接两个或更多的数组,并返回结果。

var c = a.concat(b);//c=[1,2,3,4,5,6]

这里有一个问题,concat方法连接a、b两个数组后,a、b两个数组的数据不变,同时会返回一个新的数组。这样当我们需要进行多次的数组合并时,会造成很大的内存浪费,所以这个方法肯定不是最好的。

2、for循环

大概的思路是:遍历其中一个数组,把该数组中的所有元素依次添加到另外一个数组中。直接上代码:

for(var i in b){a.push(b[i]);
}

这样的写法可以解决第一种方案中对内存的浪费,但是会有另一个问题:丑!这么说不是没有道理,如果能只用一行代码就搞定,岂不快哉~

3、apply

函数的apply方法有一个特性,那就是func.apply(obj,argv),argv是一个数组。所以我们可以利用这点,直接上代码:

a.push.apply(a,b);

调用a.push这个函数实例的apply方法,同时把,b当作参数传入,这样a.push这个方法就会遍历b数组的所有元素,达到合并的效果。

这里可能有点绕,我们可以把b看成[4,5,6],变成这样:

a.push.apply(a,[4,5,6]);

然后上面的操作就等同于:

a.push(4,5,6);

这样就很清楚了!

另外,还要注意两个小问题:

1)以上3种合并方法并没有考虑过a、b两个数组谁的长度更小。

所以好的做法是预先判断a、b两个数组哪个更大,然后使用大数组合并小数组,这样就减少了数组元素操作的次数!

2)有时候我们不希望原数组(a、b)改变,这时就只能使用concat了。


补充新知识

var a=[1,2]var b=[3,4]a.push(...b)  //es2015语法,...将数组转成序列


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

最全Windows下搭建go语言开发环境以及开发IDE

https://www.cnblogs.com/ynhmonster/p/8335797.html GO语言开发环境的搭建---Windows环境下 1、Golang下载 我是通过Golang中国下载的,因为去官网下载十分慢,甚至没有进度条。 下载地址: https://www.golangtc.com/download 我选择的是go1…

Mybatis+mysql动态分页查询数据案例——Mybatis的配置文件(mybatis-config.xml)

<?xml version"1.0" encoding"UTF-8"?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration><typeAliases><!-- 动…

外媒:微信小程序顺应“APP中启动APP”的行业潮流

BI中文站 11月30日报道 上周&#xff0c;中国网络巨头腾讯的高级副总裁张小龙对外披露了一些照片&#xff0c;显示聊天工具微信开始整合“小程序”。这一功能可以让微信的用户在无需下载软件的基础上&#xff0c;使用各种互联网应用服务&#xff0c;极大扩展微信的功能。 据外媒…

SpringMVC(笔记)

MVC简介 普通的web项目每次都要进行手动的把jar包导进去&#xff0c;否则会报500&#xff0c;class not found [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VstjHhuz-1609824493673)(C:\Users\王东梁\AppData\Roaming\Typora\typora-user-images…

php 去掉url中的index.php,php 去掉url中的index.php

php去掉url中的index.php的方法&#xff1a;首先打开相应的代码文件&#xff1b;然后将if代码块嵌套在server代码块中&#xff1b;最后重启nginx服务器即可。本文操作环境&#xff1a;nginx1.0.4系统、PHP7.1版&#xff0c;DELL G3电脑nginx服务器去掉url中的index.php将if代码…

在ASP.NET Core中使用百度在线编辑器UEditor

0x00 起因 最近需要一个在线编辑器&#xff0c;之前听人说过百度的UEditor不错&#xff0c;去官网下了一个。不过服务端只有ASP.NET版的&#xff0c;如果是为了能尽快使用&#xff0c;只要把ASP.NET版的服务端作为应用部署在IIS上就可以立即使用了。不过我的需求并不急&#xf…

php 编写线程教程,php 实现多线程

通过php的Socket方式实现php程序的多线程。php本身是不支持多线程的&#xff0c;那么如何在php中实现多线程呢&#xff1f;可以想一下&#xff0c;WEB服务器本身都是支持多线程的。每一个访问者&#xff0c;当访问WEB页面的时候&#xff0c;都将调用新的线程&#xff0c;通过这…

Vue的this

一、vue编译模块 &#xff08;1&#xff09;模块域中导出对象域 export default {data() {return {msg: };} }; A.function定义函数 I、模块导出对象的各关键字的属性值 如data的值 export default {props:[propA},data:function() {//经Vue转换&#xff0c;该函数属于Vu…

如何用TypeScript开发微信小程序

微信小程序来了&#xff01;这个号称干掉传统app的玩意儿虽然目前处于内测阶段&#xff0c;不过目前在应用号的官方文档里已经放出了没有内测号也能使用的模拟器了。 工具和文档可以参考官方文档&#xff1a;https://mp.weixin.qq.com/debug/wxadoc/dev/?t1477926804193 Type…

Axios实现异步通信

Axios异步通信(通信框架) <!--导入axios--> <script src"https://cdn.bootcdn.net/ajax/libs/axios/0.19.2/axios.min.js"></script>Axios是一个开源的可以用在浏览器端和NodeJS 的异步通信框架&#xff0c;她的主要作用就是实现AJAX异步通信&…

Java IO: InputStream

转载自 Java IO: InputStream译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) InputStream类是Java IO API中所有输入流的基类。InputStream子类包括FileInputStream&#xff0c;BufferedInputStream&#xff0c;PushbackInputStream等等。参考Java IO概述这…

检查异常和非检查异常 有空你去学一下检查异常和非检查异常

https://blog.csdn.net/weixin_39220472/article/details/81056647 Java检查异常和非检查异常,运行时异常和非运行时异常的区别 灰太狼_cxh 2018-07-15 20:51:31 7131 收藏 17 展开 通常&#xff0c;Java的异常(包括Exception和Error)分为 检查异常&#xff08;checked exce…

php 向html追加元素,在PHP中存储兄弟元素的属性和内部HTML

我试图从HTML页面中搜索和存储值,所以我有一个简单的数组数组。它只有2个数组,每个数组有3个项目长。我是这样定义的;这些只是标题:$fileContents array(array(Date, Title, Link));HTML具有以下结构:06/08/2018My Title 这个结构重复几次。我只需要上面的第一个(最新的)。我可…

八幅漫画理解使用JSON Web Token设计单点登录系统

上次在《JSON Web Token - 在Web应用间安全地传递信息》中我提到了JSON Web Token可以用来设计单点登录系统。我尝试用八幅漫画先让大家理解如何设计正常的用户认证系统&#xff0c;然后再延伸到单点登录系统。 如果还没有阅读《JSON Web Token - 在Web应用间安全地传递信息》&…

Java IO: OutputStream

转载自 Java IO: OutputStream译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) OutputStream类是Java IO API中所有输出流的基类。子类包括BufferedOutputStream&#xff0c;FileOutputStream等等。参考Java IO概述这一小节底部的表格&#xff0c;可以浏览…

pg和oracle比较,Oracle与PostgreSQL使用差异对比与总结

JDBC连接&#xff1a;Oracle的jdbc连接字符串&#xff1a;db.urljdbc:oracle:thin:192.168.1.1:1521:ORCLPostgresql的连接字符串&#xff1a;db.urljdbc:postgresql:192.168.1.1:5432/database1、基本数据类型差异OraclePostgreSQLVarchar2varcharnumbernumericdatetimestamp/…

hibernate+struts2整合jar包冲突

前几天&#xff0c;在用HibernateStruts2做项目的时候遇到了一个很棘手的问题&#xff0c;jar包冲突&#xff01;&#xff01;&#xff01;先亮一下错误&#xff1a; 之前还不知道这是个啥错误&#xff0c;经过上网查找之后才知道这是jar包冲突的问题&#xff01;&#xff01;由…

在ASP.NET Core中实现一个Token base的身份认证

以前在web端的身份认证都是基于Cookie | Session的身份认证, 在没有更多的终端出现之前&#xff0c;这样做也没有什么问题&#xff0c;但在Web API时代&#xff0c;你所需要面对的就不止是浏览器了&#xff0c;还有各种客户端&#xff0c;这样就有了一个问题&#xff0c;这些客…

Java IO: FileInputStream

转载自 Java IO: FileInputStream译文链接 作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) FileInputStream可以以字节流的形式读取文件内容。FileInputStream是InputStream的子类&#xff0c;这意味着你可以把FileInputStream当做InputStream使用(FileInputStream与…