React/Vue 中虚拟DOM中的diff算法为什么是O(n)?

diff 时新旧两个tree的子节点对比时,要去找旧节点中对应的key节点,这种需要两层循环,难道时间复杂度不是O(n*n)吗?
我能想到是O(n)的方法是将旧节点中的具有key的节点先遍历一次用hash存下来

阅读 2.5k
2 个回答

因为在算法中理论上他们生成的树的结构应该是一模一样的,同样的位置上的dom应该是一样的。不一样的话,就触发更新了

看到一个文章确实是用了hash(map),当从头到尾一一比较存在key对应不上时,就用map来存储oldFiber中有key的节点

image.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题