js-過濾資料,多層賦值
阿新 • • 發佈:2018-11-16
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)