请你把刚才写的tree class代码按我的需求优化,且不能使用JSON.parse(JSON.stringify(tree)),因为这个数据上有函数,
时间: 2024-03-20 13:40:31 浏览: 76
好的,根据您的需求,我重新优化了您的代码,使用 `Object.assign()` 方法进行浅拷贝,从而避免破坏响应性,以下是代码:
```
class Tree {
constructor(data) {
this.data = data
}
traverse() {
const traverseNode = (node) => {
let newNode = Object.assign({}, node)
if (newNode.children) {
newNode.children = newNode.children.map(child => traverseNode(child))
}
newNode.newProp = someValue
return newNode
}
let newTree = traverseNode(this.data)
return new Tree(newTree)
}
}
let tree = new Tree({
name: 'root',
children: [
{ name: 'node1' },
{ name: 'node2', children: [{ name: 'node21' }, { name: 'node22' }] }
]
})
let newTree = tree.traverse()
```
在这个代码中,我们使用 `Object.assign({}, node)` 进行浅拷贝,从而创建一个新的节点对象,避免了直接修改原始节点的问题。然后,在遍历子节点时,我们使用 `map()` 方法创建一个新的子节点数组,从而避免了使用数组的 push、pop、splice 等方法破坏响应性的问题。最后,我们直接在新节点对象上添加新属性 `newProp`,从而避免了使用 `JSON.parse(JSON.stringify(tree))` 的问题。
请注意,这里的 `someValue` 代表您要添加的属性值,您需要根据实际情况进行替换。
阅读全文