Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2534947
  • 博文数量: 308
  • 博客积分: 5547
  • 博客等级: 大校
  • 技术积分: 3782
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-24 09:47
个人简介

hello world.

文章分类

全部博文(308)

分类: Web开发

2021-12-12 16:38:54

直接上代码了,使用在vue中

点击(此处)折叠或打开

  1. /**
  2.      * 被修改的详细数据
  3.      */
  4.     modifyDetailInfo(){
  5.       let oldData = this.baseData; //更新前的数据
  6.       let newData = this.form; //更新后的数据
  7.       let result = {};
  8.       result = this.modifyMethod(oldData, newData, result); //调用计算方法
  9.       return result;
  10.     },
  11.     /**
  12.      * 计算修改的方法
  13.      */
  14.     modifyMethod(oldData, newData, result){
  15.       let propArray = Object.keys(newData); //取出更新后的成员属性值
  16.       for (var prop of propArray) {
  17.         let strConstructor = newData[prop] != null ? newData[prop].constructor.toString() : "";
  18.         let strPre = "function "; //字符串前缀
  19.         let idx = strConstructor.indexOf("()"); //找到索引值
  20.         let type= strConstructor.substr(strPre.length, idx-strPre.length); //计算出类型
  21.         if(type === "String" || type === "Number"){ //当为叶子节点时
  22.           if(newData[prop] != oldData[prop]){
  23.             let data = {};
  24.             data.before = oldData[prop];
  25.             data.after = newData[prop];
  26.             result[prop] = data;
  27.           }
  28.         }else if (type === "Object"){ //当为对象类型时
  29.             let subresult = {}; //子结果
  30.             let subOldData = oldData[prop]; //子节点更新前的数据
  31.             let subNewData = newData[prop]; //子节点更新后的数据
  32.             this.modifyMethod(subOldData, subNewData, subresult); //进行递归调用
  33.             if(Object.keys(subresult).length > 0){
  34.               result[prop] = subresult;
  35.             }
  36.         }else if(type === "Array"){ //当为数组类型时
  37.             let subOldData = oldData[prop]; //子节点更新前的数据
  38.             let subNewData = newData[prop]; //子节点更新后的数据
  39.             let len = subNewData.length; //数组的长度
  40.             let arrayResult = [];
  41.             for(let i=0; i<len; i++){
  42.               let subresult = {}; //子结果
  43.               this.modifyMethod(subOldData[i], subNewData[i], subresult); //进行递归调用
  44.               if(Object.keys(subresult).length > 0){
  45.                 subresult.modifyIndex = i; //记录索引值
  46.                 arrayResult.push(subresult);
  47.               }
  48.             }

  49.             if(arrayResult.length > 0){
  50.               result[prop] = arrayResult;
  51.             }
  52.         }else{
  53.           continue;
  54.         }
  55.       }

  56.       return result;
  57.     },

阅读(4666) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~