TS下 两数组差异对比

条件是两整型数组,用于比较后一个数组相比前一个数组 增加了哪些数据,减少了哪些数据,看过vue2 DOM diff的同学就会知道,虚拟DOM比较的是DOM对象集合的差异,我们这里稍微简单些,是俩整型数组对比

interface ResMap {
  add: Array<number | string>
  remove: Array<number | string>
}
interface CompareMap {
  [key: string]: string | number
}

/**
   * before => 差异前数组 type: Array<number | string>
   * after => 差异后数组 type: Array<number | string>
   */
  public static compareArray(before: Array<number | string>, after: Array<number | string>) {
    let res: ResMap = {
      add: [],
      remove: []
    }
    let compareMap: CompareMap = {}
    for (let i = 0; i < before.length; i++) {
      compareMap[before[i]] = before[i]
    }
    // 差异比较 compareMap中保存的是before有的而after不存在的
    for (let i = 0; i < after.length; i++) {
      if (!compareMap[after[i]]) {
        res.add.push(after[i])
      } else {
        delete compareMap[after[i]]
      }
    }
    for (let j in compareMap) {
      res.remove.push(parseInt(j))
    }
    return res
  }

核心思想: compareMap中数据,就是用来对比移除的,当俩数组对比完成后,仍在compareMap中的数据,就是比较后,后数组比前数组,减少的数据,增加或减少的数据,都存在res里,以对象形式返回。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值