第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Lodash-.extend()/ .assign()和.merge()之間的區(qū)別

Lodash-.extend()/ .assign()和.merge()之間的區(qū)別

千萬里不及你 2019-11-21 13:03:08
在Lodash庫中,有人可以更好地解釋合并和擴展/分配。這是一個簡單的問題,但答案仍然使我回避。
查看完整描述

3 回答

?
函數(shù)式編程

TA貢獻1807條經(jīng)驗 獲得超9個贊

Lodash版本3.10.1

方法比較

_.merge(object, [sources], [customizer], [thisArg])

_.assign(object, [sources], [customizer], [thisArg])

_.extend(object, [sources], [customizer], [thisArg])

_.defaults(object, [sources])

_.defaultsDeep(object, [sources])

相似點

正如您所料,它們都不對數(shù)組起作用

_.extend是的別名_.assign,因此它們是相同的

它們似乎都在修改目標對象(第一個參數(shù))

他們都null一樣

差異性

_.defaults并_.defaultsDeep以相反的順序處理參數(shù)(盡管第一個參數(shù)仍然是目標對象)

_.merge并且_.defaultsDeep將合并子對象和其他人將在根級別覆蓋

僅_.assign并且_.extend將用覆蓋值undefined

測驗

他們都以類似的方式從根本上處理成員。

_.assign      ({}, { a: 'a' }, { a: 'bb' }) // => { a: "bb" }

_.merge       ({}, { a: 'a' }, { a: 'bb' }) // => { a: "bb" }

_.defaults    ({}, { a: 'a' }, { a: 'bb' }) // => { a: "a"  }

_.defaultsDeep({}, { a: 'a' }, { a: 'bb' }) // => { a: "a"  }

_.assign處理,undefined但其他人會跳過它

_.assign      ({}, { a: 'a'  }, { a: undefined }) // => { a: undefined }

_.merge       ({}, { a: 'a'  }, { a: undefined }) // => { a: "a" }

_.defaults    ({}, { a: undefined }, { a: 'bb' }) // => { a: "bb" }

_.defaultsDeep({}, { a: undefined }, { a: 'bb' }) // => { a: "bb" }

他們都處理null相同

_.assign      ({}, { a: 'a'  }, { a: null }) // => { a: null }

_.merge       ({}, { a: 'a'  }, { a: null }) // => { a: null }

_.defaults    ({}, { a: null }, { a: 'bb' }) // => { a: null }

_.defaultsDeep({}, { a: null }, { a: 'bb' }) // => { a: null }

但只有_.merge并且_.defaultsDeep會合并子對象

_.assign      ({}, {a:{a:'a'}}, {a:{b:'bb'}}) // => { "a": { "b": "bb" }}

_.merge       ({}, {a:{a:'a'}}, {a:{b:'bb'}}) // => { "a": { "a": "a", "b": "bb" }}

_.defaults    ({}, {a:{a:'a'}}, {a:{b:'bb'}}) // => { "a": { "a": "a" }}

_.defaultsDeep({}, {a:{a:'a'}}, {a:{b:'bb'}}) // => { "a": { "a": "a", "b": "bb" }}

而且它們似乎都不會合并數(shù)組

_.assign      ({}, {a:['a']}, {a:['bb']}) // => { "a": [ "bb" ] }

_.merge       ({}, {a:['a']}, {a:['bb']}) // => { "a": [ "bb" ] }

_.defaults    ({}, {a:['a']}, {a:['bb']}) // => { "a": [ "a"  ] }

_.defaultsDeep({}, {a:['a']}, {a:['bb']}) // => { "a": [ "a"  ] }

全部修改目標對象

a={a:'a'}; _.assign      (a, {b:'bb'}); // a => { a: "a", b: "bb" }

a={a:'a'}; _.merge       (a, {b:'bb'}); // a => { a: "a", b: "bb" }

a={a:'a'}; _.defaults    (a, {b:'bb'}); // a => { a: "a", b: "bb" }

a={a:'a'}; _.defaultsDeep(a, {b:'bb'}); // a => { a: "a", b: "bb" }

沒有一個能真正按預(yù)期工作

注意:正如@Mistic所指出的,Lodash將數(shù)組視為對象,其中鍵是數(shù)組的索引。


_.assign      ([], ['a'], ['bb']) // => [ "bb" ]

_.merge       ([], ['a'], ['bb']) // => [ "bb" ]

_.defaults    ([], ['a'], ['bb']) // => [ "a"  ]

_.defaultsDeep([], ['a'], ['bb']) // => [ "a"  ]


_.assign      ([], ['a','b'], ['bb']) // => [ "bb", "b" ]

_.merge       ([], ['a','b'], ['bb']) // => [ "bb", "b" ]

_.defaults    ([], ['a','b'], ['bb']) // => [ "a", "b"  ]

_.defaultsDeep([], ['a','b'], ['bb']) // => [ "a", "b"  ]


查看完整回答
反對 回復(fù) 2019-11-21
?
慕田峪7331174

TA貢獻1828條經(jīng)驗 獲得超13個贊

要注意的另一個區(qū)別是undefined值的處理:


mergeInto = { a: 1}

toMerge = {a : undefined, b:undefined}

lodash.extend({}, mergeInto, toMerge) // => {a: undefined, b:undefined}

lodash.merge({}, mergeInto, toMerge)  // => {a: 1, b:undefined}

因此merge不會將undefined值合并為定義的值。


查看完整回答
反對 回復(fù) 2019-11-21
  • 3 回答
  • 0 關(guān)注
  • 826 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號