多维数组深拷贝与一维化

1.多维数组深拷贝

对于一维数组,直接用slice和concat就可以进行copy

多维数组的话,写个递归逐个赋值即可。请注意一点,由于在JS里面数组其实就是对象

如果你直接给数组挂了一些属性,而不是在Array.prototype上,同样的你要使用for in来找出他们。

比如 var arr = ["a", "b", "c"];

arr.show = function () {
console.log(this);
}

arr.data = 100;

如果需要同样需要复制的话,则需要使用for in循环

/*
	数组的深拷贝
*/
function arrayDeepen(arr) {
	/*
		@arr: 要进行深拷贝的数组
	*/
	var temp_arr = [];
	for(var i=0; i<arr.length; ++i) {
		if(Array.isArray(arr[i])){
			temp_arr[i] = arrayDeepen(arr[i]);
		}else {
			temp_arr[i] = arr[i];
		}
	}

	return temp_arr;
}

var a = [0, 1, 2, 3, [4, 5]];
var b = arrayDeepen(a);

a[4].push(6);
console.log(a);
console.log(b);

2.数组一维化

/*
	多维数组一维化
	[1, 2, 3, 4, [5, 6]]
	转化为 [1, 2, 3, 4, 5, 6]
*/
function flatten(arr, temp_arr) {
	/*
		@arr: 要进行深拷贝的数组
		@temp_arr: 存储中间结果的临时变量
	*/
	var temp_arr = temp_arr || [];
	for(var i=0; i<arr.length; ++i) {
		if(Array.isArray(arr[i])) {
			flatten(arr[i], temp_arr);
		}else {
			temp_arr.push(arr[i])
		}
	}

	return temp_arr;
}

console.log(flatten([1, [2, 3], [4, 5,[6, 7]], 8]))

代码有点相似,仔细区别一下就好


参考blog: 点击打开链接


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值