日常業務寫的太多已經麻痺了神經,很多本該知道的知識早已拋之腦後,大家都知道在js中函式是一等公民,但是竟然連它的特性都不清楚,真是慚愧。
在日常業務開發中,通常都會在資料中給乙個預設值,然後在請求後端資料後替換掉預設值,如果完全替換整個物件肯能並不是我們想要的,也可能會出現一些為止的錯誤,又或者需要對一些資料做修改,這個時候就需要我們寫乙個函式去替換每個key對應的value,就在昨天我也遇到了同樣的事情,廢話就不多說了,直接上**。
// form1為原始資料
// form2為後端返回資料
const
mapform
=(form1, form2)
=>}}
const form1 =
const form2 =
mapform
(form1, form2)
console.
log(form1)
//
上面**很明顯可以看出在呼叫mapform
函式後form1
的值已經和form2
完全一致,其實這也正是我想要看到的,只是當時比較疑惑,因為之前並不知道js中函式如果傳遞複雜型別的話,形式引數和實際引數存在弱引用
,所以這會導致form1的資料改變。
如果在你的**中也存在類似的情況,並且你不希望form1的物件改變,有個比較方便的辦法就是直接使用json.parse(json.stringify(obj)
的方式處理,**修改如下:
...
- mapform(form1, form2)
+ mapform(json.parse(json.stringify(form1), form2)
console.log(form1) //
因為直接使用json.parse(json.stringify(obj)
的方式並不安全,某些資料型別並不會如願,所以可以嘗試使用lodash庫提供的clonedeep函式
,方式如下:
const objects =[,
]const deep = _.
clonedeep
(objects)
console.
log(deep[0]
=== objects[0]
)// false
如果覺得這篇文章對你有幫助,幫忙點個關注,謝謝,後續會陸續更新文章。
你可能不知道的東西
元素可以分為塊級元素,行內元素以及行內塊級元素。行內元素的margin或者padding只有margin left和margin right以及padding left和padding right有效果,margin top margin bottom padding top padding bot...
你可能不知道的const
眾所周知,使用 const 宣告的變數必須同時初始化為某個值。一經宣告,在其生命週期的任何時候都不能再重新賦予新值 const a syntaxerror 常量宣告時沒有初始化 const b 3 console.log b 3 b 4 typeerror 給常量賦值const 宣告只應用到頂級原語...
你可能不知道的python logging機制
先來看幾個例子,先想一下執行結果,答案稍後揭曉 例一 mylogger logging.getlogger mylogger mylogger.info mylogger info mylogger.warning mylogger warning 例二 mylogger logging.getlo...