lodash實踐之依據規則處理物件

2022-07-09 10:48:14 字數 2278 閱讀 6592

在實際開發中,如果你遇到需要對乙個比較複雜的物件刪除某些變數,或者替換某些變數的場景,你會怎麼處理呢?

比如:

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.基於規則...