合并
const arr1 = [1, 2, 3];
const arr2 = [4, 5, 6];
方法一:concat
const arr = arr1.concat(arr2);
方法二:push
arr1.forEach(function(item){
arr2.push(item);
})
console.log(arr2)
方法三:map()
arr1.map(item=>{
arr2.push(item)
});
console.log(arr2)
方法四:apply()
函数的apply方法有一个特性,那就是func.apply(obj,argv),argv是一个数组。所以我们可以利用这点
1.
arr1.push.apply(arr1,arr2);
console.log(arr1) // [1, 2, 3, 4, 5 , 6]
2.
Array.prototype.push.apply(arr1,arr2);
console.log(arr1) // [1, 2, 3, 4, 5 , 6]
调用arr1.push这个函数实例的apply方法,同时把,arr2当作参数传入,这样arr1.push这个方法就会遍历arr2数组的所有元素,达到合并的效果。也会改变数组本身的值
方法五:ES6
const arr1 = ['a', 'b'];
const arr2 = ['c'];
const arr3 = ['d', 'e'];
// ES5 的合并数组
arr1.concat(arr2, arr3);
// [ 'a', 'b', 'c', 'd', 'e' ]
// ES6 的合并数组
[...arr1, ...arr2, ...arr3]
// [ 'a', 'b', 'c', 'd', 'e' ]
不过,这两种方法都是浅拷贝,使用的时候需要注意。
const a1 = [{ foo: 1 }];
const a2 = [{ bar: 2 }];
const a3 = a1.concat(a2);
const a4 = [...a1, ...a2];
a3[0] === a1[0] // true
a4[0] === a1[0] // true
上面代码中,a3和a4是用两种不同方法合并而成的新数组,但是它们的成员都是对原数组成员的引用,这就是浅拷贝。如果修改了原数组的成员,会同步反映到新数组。
方法六:underScope的_.union
返回传入的 arrays(数组)并集:按顺序返回,返回数组的元素是唯一的,可以传入一个或多个 arrays (数组)。
_.union([1, 2, 3], [101, 2, 1, 10], [2, 1]);
=> [1, 2, 3, 101, 10]
另外,还要注意以上合并方法并没有考虑过数组谁的长度更小,所以好的做法是预先判断数组哪个更大,然后使用大数组合并小数组,这样就减少了数组元素操作的次数!