在實際開發中,如果你遇到需要對乙個比較複雜的物件刪除某些變數,或者替換某些變數的場景,你會怎麼處理呢?
比如:
const target = ,
c: 1,
d: }
你需要對target物件做以下處理:
刪除a和b.n引數,並且b.m如果小於2的話進行刪除
替換c值和d.n值為9,並且替換d.m的值為(a+c)
你是否採用了下面的方式處理:
target.c = 9
target.d.n = 9
target.d.m = target.a + target.c
delete target.a
delete target.b.n
if (target.b.m < 2) delete target.b.m
如果規則簡單,可能用上面的方式就足夠了,但如果需要要處理的規則越來越多的話,這樣寫一是不好維護,別的童鞋可能要看半天,二是寫的時候也麻煩。那麼,如果把規則定義為乙個變數,丟給乙個工具函式來執行,這樣會不會比較直觀和好處理呢?
希望實現乙個executor函式
/***
* executor 根據匹配規則處理物件的執行器
* @param targets 處理的物件列表
* @param rules 處理規則列表
* @return 規範化的物件列表
*/const executor = (targets: partial, rules: record>): any => {}
然後書寫規則,執行該函式
const rules = ,
replace:
}const [result] = executor([target], rules)
console.log('處理結果:', result)
規則定義有兩種,一種的delete刪除,一種是replace替換。
replace規則:
首先,我們要寫乙個函式,類似如可以將引數路徑'd.m'的值為v這個資訊,轉為乙個物件型別}
/***
* converter 將字串引數路徑轉為物件
* @param path 字串形式的物件引數路徑
* @param val 引數的值
* @return 物件
*/const converter = (path: string, val: any) =>
keys.reduce((pre: record, cur: string) =>
if (!object.keys(obj).length)
return pre[cur]
}, {})
return obj
}
converter函式主要用reduce實現,converter用法是:
const obj = converter('d.m', 9)
console.log(obj)
// // }
接下來,重點來了:
import omit from 'lodash/omit'
import merge from 'lodash/merge'
/***
* executor 根據匹配規則處理物件的執行器
* @param targets 處理的物件列表
* @param rules 處理規則列表
* @return 規範化的物件列表
*/const executor = (targets: partial, rules: record>): any => , )) ||
ksp = p.concat(ks)
} else
return p
}, )
target = omit(target, keys)
break
case 'replace':
target = object.entries(params).reduce((p: record, [k, v]: any) => , {})
p = merge(p, o)
} else
return p
}, target)
break}})
return target})}
有幾個實現注意點: Spring實踐之AOP一異常處理和日誌處理
使用spring的專案中,利用好spring核心之一 aop能夠幫助我們解耦 而且還能完成很多其他工作,這裡要說的就是異常處理和日誌列印。在我們的正常流程程式中,需要有日誌處理和異常處理,但是每個方法不可能都寫一套處理的 所以我們可以借助aop來實現處理的功能!但是有乙個缺點就是通過aop處理日誌時...
python3自動化實踐18之彈出框處理
彈出框處理,這裡介紹兩種方法 使用的alert.html放置在e demo alert.html目錄,源 方法1,使用switch to alert 方法 from selenium import webdriver driver webdriver.firefox driver.get file ...
數學之美 第2章 自然語言處理 從規則到統計
任何語言都是一種編碼方式,語言的規則則是編譯碼的演算法。1.計算機能否處理自然語言?如果能,它處理自然語言的方法和人類一樣嗎?yes and yes 上下文相關的 基於語料統計的方法 2.圖靈測試 讓人和機器進行交流,如果人無法判斷自己交流得物件是人還是機器,就說明這個機器是有智慧型的。3.基於規則...