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