输入输出
var arr = [1].concat[2];
//返回值arr就是[1,2]
定义和用法
concat() 方法用于连接两个或多个数组。 该方法不会改变现有的数组, *** 返回值是被连接数组的一个副本 ***
arrayObject.concat(arrayX,arrayX,......,arrayX)
分析
js原生的concat是在连接数组的时候只会铺平一级数组, 比如:
var arr = [1].concat[2];
//返回值arr就是[1,2]
//如果连接的数组是大于一维的数组,那么,从二维开始,按照原样连接
var arr1=[1];
var arr2 = arr1.concat([2,[3],4,[5]]);
console.log(arr1,arr2)
//[1] [1,2,[3],4,[5]]
实现一 (经典的for循环)
Array.prototype._concat = function() {
var arr = JSON.parse(JSON.stringify(this)); // 用JSON可以深度拷贝数组
//var arr=this.slice(0)//用slice能实现浅拷贝this数组
for (var i = 0; i < arguments.length; i++) {
var argo = arguments[i];
for ( var j = 0; j < argo.length; j++ ) {
arr.push(argo[j]);
}
};
return arr;
}
var arr1 = [1,2,3], arr2 = ['a','b','c'];
arr1._concat(arr2) //[1, 2, 3, "a", "b", "c"]
实现二
只是不用for循环,换了map而已,代码更简洁 此方法增加了参数是非数组的处理
Array.prototype._concat = function(){
var arr = JSON.parse(JSON.stringify(this));
var args = [...arguments];
args.map(item=>{
if(Array.isArray(item)){
item.map(val=>{
arr.push(val)
})
}else{
arr.push(item)
}
});
return arr;
}
var arr1 = [1,2,3]
var arr2= [4,5,6]
arr1._concat(arr2)
//[1, 2, 3, 4, 5, 6]
arr1._concat(0); // [1,2,3,0]
总结:
- 注意连接数组的层级,大于一级的并不会被铺平
- concat的返回值才是连接后的数组
- 数组1.concat(数组2)中,数组1的获取方式需要考虑到多维度的情况。
- 对于入参是非数组的情况也要考虑
- 本例中arr.concat(0),参数是非数组的场景没有处理哈