lodash中的get方法

2021-10-12 09:30:57 字數 2731 閱讀 3118

lodash中使用頻率最高的,應該就是_.get()方法去根據路徑獲取物件的值了。他的使用方式非常簡單:

_.

get(object, path,

[defaultvalue]

)// 根據 object物件的path路徑獲取值。 如果解析 value 是 undefined 會以 defaultvalue 取代。

這樣我們可以使用如:.get(object, 『a[0].c』, 『default』); 獲取物件n級路徑下的值,如果中間路徑值為空,返回預設值,以免直接使用a[0].c時因a[0]為undefind造成undefind.c報錯。那麼lodash中是如何實現.get()方法的呢?

下面 po 一段 lodash 中 _.get方法的實現(主要功能及解釋):

// 1、主方法 get

function

get(object, path, defaultvalue)

// 2、baseget方法 獲取物件路徑下的值

function

baseget

(object, path)

**// 最後一級,返回object或者返回 undefined

return

(index && index == length)

? object : undefined

}// 以上涉及兩個方法:(1)將castpath 獲取 object中的path,轉為陣列

// (2)tokey 將path陣列中對應的值轉為key

// (1)castpath(path, object) 如castpath('a[b].c', object)

function

castpath

(value, object)

return

iskey

(value, object)

?[value]

:stringtopath

(value)

// 其中,iskey方法判斷value是不是object物件的獲取key的合法路徑,主要基於value的型別判斷和正則匹配,具體可見[lodash的解釋](

// stringtopath方法,則是將字串形式的路徑,轉化為陣列,如將'a[0].c.d' 利用正則和字串api轉化為 ['a',0,'c','d'],具體可見[github](

}//(2)tokey(path[index++]) 將path陣列中對應的值轉為key

const

infinity=1

/0function

tokey

(value)

// 此外,判斷+-0,或者返回value本身,如純數字

const result =`$

` return

(result ==

'0'&&(1

/ value)==-

infinity)?

'-0'

: result

}

以上為lodash中get方式獲取path路徑下的主流程,更多複雜的如iskey判斷和字串轉path陣列,可檢視github-get.js中具體的實現。

1、(1)每一級處理,都需要有判空的判斷,避免流程阻斷(3)物件獲取下一級路徑的值時,這裡的while方法,要判斷新的object是否為null;(3)在獲取物件的下一級鍵值時,使用的是object[key]的方式,這樣可以相容獲取a[2]及a[『b』]這兩種形式。

2、學習iskey方法:判斷 value 是否是object的合法路徑,並不是簡單object[value]就能了事了

const reisdeepprop =

/\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/

const reisplainprop =

/^\w*$/

function

iskey

(value, object)

var type =

typeof value;

// 對應的幾種型別:number,symbol,boolean, null,還有issymbol判斷直接返回true

if(type ==

'number'

|| type ==

'symbol'

|| type ==

'boolean'

|| value ==

null

||issymbol

(value)

)return reisplainprop.

test

(value)

||!reisdeepprop.

test

(value)

||(object !=

null

&& value in

object

(object)

);

(1)、reisplainprop很好理解,\w 匹配字母或數字或下劃線或漢字 等價於 『[a-za-z0-9_]』,*表示0次或多次,即 reisdeepprop.test(value) 表示value為任意數字及下劃線

(2)、value in object(object) 表示value是object的乙個鍵值

(3)、reisdeepprop正規表示式,用來匹配屬性名裡包含路徑屬性 例如什麼. \這種

jQuery 中的 get 方法

在 jquery 中,get 方法和 post 方法都是通過 http get 或 post 請求從伺服器請求資料的,但兩者又有很多的不同之處,例如 1 get 是從伺服器上獲得資料 2 get 表單中資料是使用 連線並且各個變數之間使用 連線 3 get 是不安全的,因為在傳輸過程,資料被放在請求...

jQuery中 ajax 的get 方法

這兩天在搞跨域的問題,新手乙個,就寫寫自己都遇到什麼問題,總結一下吧。1.用get方法來請求資料 ajax 所遇到的問題 url的跨域問題,無法訪問,最後通過伺服器 解決,但post方法似乎不能用伺服器 一直報錯,求指導 2.用get方法向伺服器返回資料 ajax success function ...

python字典中get()方法

下述 皆由jupyter notebook軟體進行操作 非jupyter notebook軟體注意格式轉換 描述python 字典 dictionary get 函式返回指定鍵的值,如果值不在字典中返回預設值。語法get 方法語法 dict.get key,default 引數key 字典中要查詢的...