一个简单地深拷贝

function isQuoteData(data) {
	return ['Map', 'Set', 'Array', 'Object'].includes(
		{}.toString.call(data).split(' ')[1].slice(0, -1)
	);
}

function deepClone(obj) {
	let o = null;
	if (!isQuoteData(obj)) {
		o = obj;
	} else {
		if (obj instanceof Map) {
			o = new Map();
			obj.forEach((value, key) => {
				o.set(key, deepClone(value));
			});
		} else if (obj instanceof Set) {
			o = new Set();
			obj.forEach(item => {
				o.add(deepClone(item));
			});
		} else if (obj instanceof Array) {
			o = [];
			obj.forEach(item => {
				o.push(deepClone(item));
			});
		} else if (obj instanceof Object) {
			o = {};
			Object.entries(obj).forEach(([key, value]) => {
				o[key] = deepClone(value);
			});
		} else {
			o = obj;
		}
	}
	return o;
}

let a = {
	x: new Map([['x', 100]]),
	y: new Set([1, 2, {1:2}]),
	z: [1, 2, 3]
};

const b = deepClone(a)
a.x.set('y', 'm78')

//...dosomething

  

posted @ 2021-04-28 10:27  nextYearToday  阅读(53)  评论(0)    收藏  举报