国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

初學immutable.js的一些總結

Near_Li / 527人閱讀

摘要:在中,的返回值是,即一個新的對象。該方法在中的和中均有使用,但是此處的方法返回的是一個布爾值。是排序方法,可以傳入一個函數,通過返回值的正負確定元素的前后排序順序。

1.immutableObj在復制的時候,復制的是引用。

=== 比較的是引用是否一樣。
而is()和equal()表示的是值是否一樣,什么是值,我認為就是將一個對象Json.stringify()之后的的數據。

總體而言,如果===相等,那么使用equal()和is()也是相等的;
如果只是is和equal()相等,可能===相等,也可能是兩個對象被json.stringify()之后的字符串是相等的。

如果是像map1 = map3的賦值操作,其實這里復制的是引用。
就上面的結論可知,只要引用向相同, === 和 equals() 返回的都是true.

2.immutable中的對象的使用和es2015灰常的像,一個最大的區別,就是不管啥時候,返回值都是一個新的immutable集合。
比如arr=[1,2] ,arr.push(3,4)的返回值是4,即arr的新長度。
在immutable中,arr1=List([1,2]) , arr1.push(3,4)的返回值是List([1,2,3,4]),即一個新的immutable對象。

3.immutable對象和es2015中原生的對象是可以自由合并的。啥意思?就是當obj被immutable的Map對象merge,
或者是array被immutable的List來concat的時候,es2015中的array和object就被自動對應轉換成了List和Map.

說白了,就是當Array或者Object被傳入immutable的List和Map使用的方法的時候,會做一個類型檢測,如果接受的參數是
Array,就將該Array轉換成List,如果參數是Object, 就將該Object轉換成Immutable的Map.

換一個角度看,這可以讓我們更靈活的合并處理es2015的原生對象和immutable對象。即擴展了es2015原生對象的方法集。

注意:使用immutable對象的api將es2015原生對象Object轉換成immutable中的map的時候,這個Object的所有key值都會被作為字符串處理。

如果Object使用的是[變量]的方式設置的key值,當使用immutable的map的api將其轉換成map的時候,這個key值就是[變量]中的
"變量"指代的字符串。
但如果變量指代的不是字符串,而是對象呢? ==> 當然是把這個對象stringy成一個字符串啊

4.immutable對象怎樣轉換成es2015的原生對象呢?
這里的轉換有三種: 對應淺拷貝的淺轉換;toObject() / toArray()
對應深拷貝的深轉換; toJS() , toJSON()
直接轉換成字符串; JSON.stringify(immutableObj)
注意: 這里的toObject() / toArray / toJS() / toJSON都是map和list通用的。

5.所有的immutable的對象都是iterable對象,這可就意味著它可以被yield,可以被for of, 也可以被...符號所展開。

6.操作嵌套immutable數據結構的有效方式就是使用專門操作嵌套數據的api.
比如mergeDeep(),getIn(),setIn(),updateIn(). 這4個方法被使用在List,Map和OrderedMap對象上。
getIn()/setIn()/updateIn()傳遞的第一個參數是key值組成的路徑。
而mergeDeep()傳遞的參數是一個嵌套Obj.

7.當map在使用自己的api來update自己的時候,如果update的結果和自己原本是一模一樣的,
那么該update的api返回的對象的引用和自己是一樣的。
當update之后的結果和自己不同,那么update返回的對象會被在內存中新建一個引用。

es2015中原生的map如果使用set()更新了自己的數據,不管更新之后,數據有沒有變化,
set()方法返回的引用都是一樣的。

8.如果想要多次更改某個immutable對象,但是卻只需要生成一個新的immutable對象,
可以使用withMutations()方法。在這個方法中,只能夠使用set,push,pop,clear,unshift,shift ,
update, setIn , updateIn , mergeIn,mergeDeepIn() , concat()方法。

9.seq是一種可以使用鏈式書寫的對象。它在使用鏈式書寫的時候,只會產生一個新對象,鏈式中間的操作是不會產生新的對象的。
其他的常用對象,比如Map和List可以通過Seq()轉換成一個seq對象。但是事實上,這種對象有什么樣的具體作用還尚不清楚。

下面挑選了List對象來進行深度分析,下面是一些API的記錄:

/**

List對象可以由3種方式轉換而成。

(1) es2105中的Array;

(2) es2015中的set

(3) immutable中的set

(4) es2015中的Array或者set的遍歷器接口 : someArray[Symbol.iterator]()

*

可以通過List.of()方法構造List.這個和es2015的Array.of()是一樣的。

*

更新List中的值使用的是set()方法,這個和es2015中的Array和set都不同,和es2015的map設置值的方式是一樣的。

這里的set()方法的第一個參數是索引,該索引可以是負數,用法和Array中使用slice()方法參數為負數是一樣的。

*

刪除List中的數據,使用的是delete()方法。該方法在es2015中的set和map中均有使用,但是此處的delete()方法返回的是

一個布爾值。而List中使用的delete()方法更像Array中的splice(index,1),只不過,delete()的返回值是一個新的List,

而splice()返回的是被刪除的項目。

*

向List中增加數據,使用的是insert()方法,和Array中的splice(index, 0 , value)一樣。返回的是一個新的List()對象。

*

對List的首尾增減使用的是和es2015中的Array一樣的方式,只不過這4個api返回的都是一個新的List對象。

push(), pop(), shift(), unshift()

*

如果想要更新List中某一個已有項目的value,使用的是update()方法。這個方法接受2個參數,第一個參數是索引,第二個參數

是一個函數,這個函數接受之前在該索引位置的值作為參數,返回一個新value,可以是任意類型。注意,update()是更新已有的值,

set()是設置某個位置上的值,如果那個位置上已經有值,使用set()設置之后,該位置上的值會被替換。

*

如果想要向Array設置length一樣,粗暴地重置一個List的長度,使用的方法是setSize()方法。二者效果是一致的。

setSize()返回一個新長度的List()對象。

*

如果想要深度設置List內部嵌套的數據,使用setIn()方法,第一個參數是索引組成的路徑。第二個參數是新設置的值。

話說這個嵌套是個什么嵌套法?

當嵌套的是Array或者是List的時候,path中都是索引;當嵌套的是Object或者是Map的時候,path是索引和key組合的。

*

如果想更新嵌套List,使用的api是updateIn(),該參數接受兩個參數,一個是索引組成的path,第二個依舊是一個函數,接受

該位置老數據作為參數。

*

類似于Array中的其他方法,比如concat(),map(),filter()方法的使用都和Array是一樣的,只不過這幾個方法返回的都是新的

List對象。然后在map()和filter()方法中的item都是一個Immutable對象。

*

另,List中的還有filterNot()方法,其實就是對filter()方法取反。其他的使用方法一樣,也是返回一個布爾值。

*

另,List中還有reverse()和sort()方法,reverse()方法和Array中的reverse()方法是一樣的,都是用來將索引翻轉。

sort()是排序方法,可以傳入一個函數,通過返回值的正負確定元素的前后排序順序。

*

如果是一個簡單map調用sort()進行排序,sort((a,b)=>{})中的a和b是map中的第一層value.

如果是一個復雜的map想要使用sort來排序,可能由于value的數據類型不同,sort()函數根本就無法比較。

此時需要使用sortBy()函數,該函數接受兩個參數,第一個參數用來指定要比較的是每一個map項目中的某個部分,

第二個參數和sort()函數接受的回調是一樣的,即比較那一項,根據返回值的正負確定排序。

*
*

如果想要將一個List轉換成Array,有淺轉換和深轉換。

someList.toJS() : 遞歸轉換List成es2015中的array,將List中的所有項目轉換成Array和object;

*

someList.toJSON() 和 someList.toArray() 都是將一個List淺轉換成array,也就是說,將這個List轉換成Array,這

個array中的items的類型是不會被轉換的。之前的List中的第一層數據如果有List和Map,那么淺轉換之后的Array的

第一層item還是List和Map.

*

someList.toObject()可以將List轉換成key是string的Object.

*
*

上面的方法都是講怎么操作整個List的。下面的有幾個方法講怎么獲取List中的item.或者給item賦值的。

get(index)獲取某個索引位置的value;

has(index) 判斷某個索引是不是存在的。比如一個List的size是6,那么has(7)肯定返回false.

includes(value) 判斷List中存在某個value.這個參數value如果和List中的某個value是值等的,就返回true.

*
*

另,在Array中還有splice()方法啊,indexof(), lastIndexOf(), List中也有這些方法,使用效果都是一樣的。

*

**/

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/101840.html

相關文章

  • 深入理解js

    摘要:詳解十大常用設計模式力薦深度好文深入理解大設計模式收集各種疑難雜癥的問題集錦關于,工作和學習過程中遇到過許多問題,也解答過許多別人的問題。介紹了的內存管理。 延遲加載 (Lazyload) 三種實現方式 延遲加載也稱為惰性加載,即在長網頁中延遲加載圖像。用戶滾動到它們之前,視口外的圖像不會加載。本文詳細介紹了三種延遲加載的實現方式。 詳解 Javascript十大常用設計模式 力薦~ ...

    caikeal 評論0 收藏0
  • 翻譯連載 | 附錄 C:函數式編程函數庫-《JavaScript輕量級函數式編程》 |《你不知道J

    摘要:為了盡可能提升互通性,已經成為函數式編程庫遵循的實際標準。與輕量級函數式編程的概念相反,它以火力全開的姿態進軍的函數式編程世界。 原文地址:Functional-Light-JS 原文作者:Kyle Simpson-《You-Dont-Know-JS》作者 關于譯者:這是一個流淌著滬江血液的純粹工程:認真,是 HTML 最堅實的梁柱;分享,是 CSS 里最閃耀的一瞥;總結,...

    Miracle 評論0 收藏0
  • React-redux進階之Immutable.js

    摘要:的優勢保證不可變每次通過操作的對象都會返回一個新的對象豐富的性能好通過字典樹對數據結構的共享的問題與原生交互不友好通過生成的對象在操作上與原生不同,如訪問屬性,。 Immutable.js Immutable的優勢 1. 保證不可變(每次通過Immutable.js操作的對象都會返回一個新的對象) 2. 豐富的API 3. 性能好 (通過字典樹對數據結構的共享) Immutab...

    孫淑建 評論0 收藏0
  • CoderPad-基于React全家桶寫作/新聞一體綜合應用實踐總結

    摘要:基于全家桶寫作新聞一體綜合應用的實踐總結在線地址大家伙兒們,又見面了。參照但不可否認非常符合的思想,都在處理大規模數據時彰顯優勢。最好的辦法是使用部署環境。細致的拆分,解耦性更好,以為單位進行修改時,大大降低誤傷率的同時,隔離無關的信息。 ?CoderPad-基于React全家桶寫作/新聞一體綜合應用的實踐總結 showImg(https://segmentfault.com/img/...

    DC_er 評論0 收藏0
  • 前端數據扁平化與持久化

    摘要:與持久化工程師花了年時間打造,與同期出現。有持久化數據結構,如等,并發安全。總結篇幅有限,時間也比較晚了,關于前端數據的扁平化與持久化處理先講這么多了,有興趣的同學可以關注下,后面有時間會多整理分享。 (PS: 時間就像海綿里的水,擠到沒法擠,只能擠擠睡眠時間了~ 知識點還是需要整理的,付出總會有收獲,tired but fulfilled~) 前言 最近業務開發,從零搭建網頁生成器,...

    dreamtecher 評論0 收藏0

發表評論

0條評論

Near_Li

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<