diff算法-patch函数(三)

前言

diff算法主要是三步:生成虚拟节点、将新旧虚拟节点对比(核心)、新节点替换旧节点。本篇文章主要讲如何实现patch函数中最后一部分,也是最核心的一部分。

介绍

前面已经把,不同节点的情况和相同节点且旧节点没有子节点情况讲解了,这篇文章来介绍以下,相同节点情况下,旧虚拟虚拟节点有子节点并且新虚拟节点也有子节点的情况,需要按照规定的比较顺序比较,比较的规则如下:

为了方便书写,我会进行简写:

旧前:旧虚拟节点的头部指针

旧后:旧虚拟节点的尾部指针

新前:新虚拟节点的头部指针

新前:新虚拟节点的头部指针

比较会有六种情况:

比较永远都是从第一种情况开始匹配!!!

1.旧前 – 新前
2.旧后 – 新后
3.旧前 – 新后
4.旧后 – 新前
5.查找
6.创建或者删除

情况一:旧前 – 新前

情况一匹配成功,此时旧前和新前的指针会++

情况二:旧后 – 新后

情况二匹配成功,此时旧后和新后的指针会–

情况三:旧前 – 新后

情况二匹配成功,此时旧前会++和新后的指针会–

情况四:旧后 – 新前

情况二匹配成功,此时旧后会–和新前的指针会++

情况五:查找

新节点添加到页面,并且如果旧节点有新节点的值,那么旧节点值赋值为undefined

实现

首先,我们

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值