concat() 方法用于连接两个或多个数组。
该方法不会改变现有的数组,而仅仅会返回被连接数组的一个副本。
var arr = [0,1,2,3,4,5,6];
//方法1:for循环
var newArr1 = [];
for (var i = 0; i < arr.length; i++) {
newArr1.push(arr[i]);
}
console.log(newArr1); //ok [0,1,2,3,4,5,6]
//方法2:数组的concat方法
var newArr2 = [].concat(arr);
console.log(newArr2);
//方法3:使用ES6的展开操作符
var newArr3 = [...arr];
console.log(newArr3);
//方法4:字符串的split 数组的join方法:
var newArr4 = arr.join(" ").split(" ").map(function(i){return parseInt(i);});
console.log(newArr4);
//方法5:Object.assign()
let A = [ 1, 2, 3 ]
let B = Object.assign( [], A );
console.log(B);
//方法4: slice()
// arrayObject.slice(start,end),该方法返回一个新的数组,
//包含从 start 到 end (不包括该元素)的 arrayObject 中的元素
let A = [ 1, 2, 3 ]
let B = A.slice(0);
深拷贝就是指完全的拷贝一个对象,即使嵌套了对象,两者也相互分离,修改一个对象的属性,也不会影响另一个。
let A = [ { a: 1 }, [ 1, 2 ], 3 ];
let B = JSON.parse( JSON.stringify( A ) );
2、利用jQuery的$.extend方法。
$.extend( [deep ], target, object1 [, objectN ] );
- deep表示是否深拷贝,为true为深拷贝,为false,则为浅拷贝
- target Object类型 目标对象,其他对象的成员属性将被附加到该对象上。
- object1 objectN可选。 Object类型 第一个以及第N个被合并的对象。
let A = [ { a: 1 }, [ 1, 2 ], 3 ];
let B = $.extend( true , [] , A ); // 默认为false,是浅拷贝,true为深拷贝
3、拷贝的时候判断属性值的类型,如果是对象,继续递归调用深拷贝函数。
var deepCopy = function(obj) {
// 只拷贝对象
if (typeof obj !== 'object') return;
// 根据obj的类型判断是新建一个数组还是一个对象
var newObj = obj instanceof Array ? [] : {};
for (var key in obj) {
// 遍历obj,并且判断是obj的属性才拷贝
if (obj.hasOwnProperty(key)) {
// 判断属性值的类型,如果是对象递归调用深拷贝
newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key];
}
}
return newObj;
}
4、或者借助插件函数:_.cloneDeep(),进行深拷贝。