js-过滤数据,多层赋值

JS处理脏数据-深度遍历-多层赋值

起因

由于后端数据的不可控 ,总会出现不按照约定的情况处理,影响前端数据

思路 - 比较 两个对象 的属性和值

1.基础属性满足 ? 是,则进行值判断 : 否,加入脏数据集合
2. 单属性 最终值 类型判断 若未 string boolean number 断值
3.判断值是否 undifind null ? 是,设置默认值 : 否,源值

代码

 filter(baseObj,newObj){
    /*
    *1. 深度遍历数据是否满足所有属性需求
    *2. 满足的情况下 检测数据判断使用默认值  否则  直接过滤这条数据 上报后台
    *
    * */
    var result = {};
	for (let p in baseObj) {
      if (!newObj.hasOwnProperty(p)) {
        type = false;
      }
    }//脏数据 需要上报
    if(type == false) return {type,newObj}

    //多层赋值
    const EdiObjValue = (obj,keys,newObj)=>{
      if(keys.length == 0) return;
      const curr = keys[0];
      if(keys.length == 1){
        try{
          //判断 是否有新值
          if(!String.HasText(newObj[curr])){
            newObj[curr] =obj[curr]
          }
        }catch(e){
          console.log(9999)
        }

      }else{
        EdiObjValue(obj[curr],keys.splice(1),newObj[curr])
      }
    };


    const isSingle =(curr)=>{
      return (typeof  curr == 'string' || typeof curr=='number' || typeof curr=='boolean' )
    }
    const deepCompare = (oldVal,keys)=>{
      // y 的属性肯定要包含x 的属性
      if(isSingle(oldVal)){
        console.error('=======isSingle=======',keys,oldVal)
        EdiObjValue(baseObj,keys,newObj)
      }else{
        for(let p in oldVal){
          deepCompare(oldVal[p],keys.concat(p))
        }
      }
    }

    var type = deepCompare(baseObj,[]);
    return {type,newObj};

  }

在这里插入图片描述

Demo

const defObj = {
     "uuid":"",
     "type":1,
     "hot_num":0,
     "add_time":"2018-11-14 10:34:55",
     "viewpoint":99999,
     "data":{
       "comment_count":0,
       "message_text":{"link_type":"2","uuid":"","content":""},
       "link":{"origin_url":"","link_type":"2","author":"","nickname":"","identify_pic":"1","message_uuid":"","pic":"","title":"9999999999999","uuid":"","url":""},
       "account":{"head_image_url":"","activity_uuid":"","activity_type":"1","name":"", "uuid":""}
     }
   },newObj = {"uuid":"67eb72fe2617433fb0efb813035baf3e","type":1,"hot_num":0,"add_time":"2018-11-14 14:43:36","viewpoint":null,"data":{"comment_count":0,"message_text":{"link_type":"2","uuid":"67eb72fe2617433fb0efb813035baf3e","content":" 那是一篇浩浩洋洋的长文,该有一万多字罢,——而且还有作者吴宓君的照相。记者又在论前介绍说,“泾阳吴宓君美国哈佛大学硕士现为国立东南大学西洋文学教授君既精通西方文学得其神髓而国学复涵养甚深近主撰学衡杂志以提倡实学为任时论崇之”。\n  但这篇大文的内容是很简单的。说大意,就是新文化本也可以提倡的,但提倡者“当思以博大之眼光。宽宏之态度。肆力学术。深窥精研。观其全体。而贯通澈悟。然后平情衡理。执中驭物。造成一是之学说。融合中西之精华。以为一国一时之用。”而可恨“近年有所谓新文化运动者。本其偏激之主张。佐以宣传之良法。……加之喜新盲从者之多。”便忽而声势浩大起来。殊不知“物极必反。理有固然。”于是“近顷于新文化运动怀疑而批评之书报渐多”了。这就谓之“新文化运动之反应”。然而“又所谓反应者非反抗之谓……读者幸勿因吾论列于此。而遂疑其为不赞成新文化者”云。\n  反应的书报一共举了七种,大体上都是“执中驭物”,宣传“正轨”的新文化的。现在我也来绍介一回:一《民心周报》,二《经世报》,三《亚洲学术杂志》,四《史地学报》,五《文哲"},"link":{"link_type":"2","identify_pic":"0","message_uuid":"67eb72fe2617433fb0efb813035baf3e","uuid":"9f5a65173dcb412eafee8d6e3ca3932a","url":"https://mp.weixin.qq.com/s/5zmrnCQXm6qp6rpXo1WVTg"},"account":{"head_image_url":"https://img-insight-test.newrank.cn/insight/publish/image/2018/11/15/9a843b2f11fe4223a50afff7804225b4.jpeg?height=450&width=600","activity_uuid":"b49a05621872489582e125f504b4bcec","activity_type":"1","name":"玻璃与蓝空9","description":"噜啦噜啦嘞啦啦啦啦啦啦啦啦考虑","uuid":"8059011cf9e542b28b10dc7a5d50c420"}}}


 filter(defObj,newObj,[])

 console.log(defObj,newObj,99999)
对于 newObj 对象 当其值为空时 设置了默认值

![在这里插入图片描述](https://img-blog.csdnimg.cn/20181116123448352.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2I3NDEwODUyOTYz,size_16,color_FFFFFF,t_70)

猜你喜欢

转载自blog.csdn.net/b7410852963/article/details/84137260
今日推荐