UNPKG

costreamjs

Version:

A high-performance streaming programming language for parallel architecture. This repo (js-version) is created for better using & reading & debugging.

28 lines (27 loc) 978 B
/** * 深拷贝一个数据结构, 包括其原型链, 但以下滑线_开头的属性名浅拷贝, 例如 _symbol_table */ export function deepCloneWithoutCircle(node) { let hasVisitedNode = new WeakMap() return deepClone(node) function deepClone(node) { if (hasVisitedNode.has(node)) { console.error("深拷贝出现循环引用错误,请检查:",node) } else { if (['number', 'boolean', 'string', 'undefined'].includes(typeof node) || node === null) { return node } else { hasVisitedNode.set(node, true) let obj = new node.constructor() Object.keys(node).forEach(key => { if(key.startsWith('_')){ obj[key] = node[key] }else{ obj[key] = deepClone(node[key]) } }) return obj } } } }