在使用Javascript数组的时,经常会需要将两个或多个数组合并成一个数组.本文就常用的几种合并方法通过示例代码,进行简单的讲解.个人备忘,也希望对大家的学习或者工作具有一定的参考价值.
假设有2个数组
var a = [1,2,3];
var b = [4,5,6];
将上面两个数组合并成一个,本人第一个想法是用a.push(b),但返回的结果是[1,2,3,array(3)].这样合并方法是有问题的,push方法的参数是一个或多个值,这样合并的是b数组本身,而不是b数组中的元素.经过网络搜索整理,用到的方法如下:
1. concat
js的Array对象的concat()方法.array.concat(value,...),此方法的参数为任意个要衔接到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,args),args是一个数组.所以我们可以利用这点,将数组附加到obj对象上.具体如:
a.push.apply(a,b);
调用a.push这个函数实例的apply方法,同时把b数组当作参数传入,这样a.push这个方法就会遍历b数组的所有元素,达到合并的效果.需要注意的是:
1. 这种方式会修改数组a;
2. 当对一个方法传入非常多的参数(比如10000个)时,很可能会导致越界问题.
使用以上方法,还要注意两个小问题:
1. 以上3种合并方法并没有考虑过a、b两个数组谁的长度更小,所以好的做法是预先判断a、b两个数组哪个更大,然后使用大数组合并小数组,这样就减少了数组元素操作的次数.
2. 有时候我们不希望原数组(a、b)改变,这时就只能使用concat了.
欢迎分享交流,转载请注明出处:WithCoder » Javascrip合并数组的几种方法