合并两个数组的方法

news/2024/7/19 13:28:18 标签: 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了。

转自:http://www.cnblogs.com/Being-a-runner-up/p/5627166.html


http://www.niftyadmin.cn/n/874551.html

相关文章

python 数据库操作 yeild from_python中的yield和yield from

学到了一点,就写一点吧:本文不区分生成器和协程,且把生成器直接当做协程,对于from inspect import iscoroutine中的async协程类型一无所知,开始:yield: 流程控制工具: 可以把控制器让步给中心调度程序,从而激活其他协程.(简单说就是实现线程中任务切换)协程四个状态:1.GEN_CREA…

html 类似雷达扫描效果 及 闪屏效果

//雷达扫描效果 1 <em id"Radar" class"RadarFast"></em>css:.RadarFast{position: absolute;z-index: 10;bottom: 140px;left: 50%;margin-left: -3px;}.RadarFast:after{content: ; position: absolute; width: 280px; height: 280px; borde…

监听audio标签播放

<audio id"audio" controls"controls" loop"loop" style"display: none;"><source src"image/3.mp3" type"audio/mpeg" /> </audio>audio.play();//播放 audio.pause();//暫停//监听播放完毕a…

文字转换语音播报

1.网页版&#xff1a; <script type"text/javascript">var msg new SpeechSynthesisUtterance("你是谁");window.speechSynthesis.speak(msg);</script> 2.webAPP&#xff1a; <div id"Box"></div>var src "号请…

python标准算术操作符_Python脚本编程:标准类型运算符和内建函数

1.标准类型运算符:(1)对象值的比较(2)对象身份的比较:例1.如:foo1 foo2 4.3 表示foo1和foo2指向相同的对象.(这条语句等同于 foo1 4.3 foo2 foo1) 因为Python是通过传递引用来处理对象的.例2.foo1 4.3 第一个数值对象被创建,然后赋值给foo1,foo2 1 3.…

radminpass.php utf 8,dedecms打点员密码重置工具radminpass.php

3.在“用户密码”里输入新的网站打点员密码&#xff0c;点击“确定改削”即可注重&#xff1a;密码重置后&#xff0c;实时删除radminpass.php文件防止被恶意使用。工具使用教程1.下载织梦CMS密码重置工具压缩包radminpass.zip&#xff0c;解压后获得UTF-8、GBK两个文件夹&…

windows笔记本 显示器 分屏_MacBook屏幕太小?CFORCE便携屏分屏工作流简单介绍

前言我的屏幕从24寸的戴尔U2417到AOC的4kU2790PQU&#xff0c;双屏之后变成单屏&#xff0c;因为两个尺寸不一致&#xff0c;还有就是分辨率差距太大&#xff0c;所以把戴尔的出掉留下AOC&#xff0c;所以也使用了一段时间的双屏&#xff0c;后来买了明基的EX2710&#xff0c;把…

js路径中取文件名

使用js 提取文件名和路径&#xff1a; <script>var str"/abc/def/sos.php";var objstr.lastIndexOf("/");console.log(str.substr(obj1)); </script> 我们首先利用 lastIndexOf("/") 找到最后一个 / 的位置&#xff0c; 然…