zoukankan      html  css  js  c++  java
  • 找到新对象与默认对象的差别。优化接口。

    在工作中我们经常会操作某个对象,如果对象很大,但是每次只更改一小部分。没必要把个对象都传给后端。采取值传递修改的数据。如果不修改,传空对象。在获取的时候,可通过lodash的merge 函数,进行对象合并。

    1

    function findDiffFn(newObj, stardardObj) {
      let isArray = Array.isArray(newObj)
      const diff =isArray?[]: {}
      let deepDiff
      for (const key in newObj) {
        if (typeof newObj[key] === 'object' && typeof stardardObj[key] === 'object' && newObj[key] && stardardObj[key]) {
          deepDiff = findDiffFn(newObj[key], stardardObj[key])
          if (deepDiff && Object.keys(deepDiff).length > 0) {
            diff[key] = deepDiff
          }
        } else if (newObj[key] !== stardardObj[key]) {
          diff[key] = newObj[key]
        }
      }
      return diff
    }

    //测试用例

    const newObj = {
      a:123,
      c:{
        a:23
      }
    }
    const stardard = {
      a:123,
    }
    const diff = findDiffFn(newObj, stardard)
     
    //结果{"c":{"a":23}}
     
     
     
     
    2:对象对比,返回属性访问路径,和值
      const tmp = []
    const obj = {}
      function findDiffFn(modifyObj, defaultObj, tmp, obj) {
        if (!modifyObj || typeof (modifyObj) !== 'object') return modifyObj
        if (!defaultObj || typeof (defaultObj) !== 'object') return modifyObj
        let isArray = Array.isArray(modifyObj)
        const diff = isArray ? [] : {}
        for (const key in modifyObj) {
          tmp.push(key)
          if (modifyObj[key] && defaultObj[key]) {
            findDiffFn(modifyObj[key], defaultObj[key], tmp, obj)
            if (modifyObj[key] !== defaultObj[key]) {
              diff[key] = modifyObj[key]
              const path = tmp.join('.').replace(/(.d).?/g, (str, a) => `[${a.substr(1)}]${str.length>>2? '.':''}`)
              obj[path] = modifyObj[key]
            }
            tmp.pop()
          }
          return obj
        }
      }
  • 相关阅读:
    Python自动化之面向对象进阶
    Python自动化之pickle和面向对象初级篇
    Python自动化之常用模块
    剑指offer 顺时针打印矩阵
    剑指 offer 树的子结构
    剑指offer 合并两个排序的链表
    剑指offer 调整数组顺序使奇数位于偶数前面
    剑指offer 数值的整数次方
    变态跳台阶
    剑指offer 重建二叉树
  • 原文地址:https://www.cnblogs.com/binglove/p/14241737.html
Copyright © 2011-2022 走看看