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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章