Immutable
2017-11-20 19:23:32 8 举报
AI智能生成
Immutable学习笔记导图
作者其他创作
大纲/内容
<h2 data-source-line="9">Immutable 的几种数据类型</h2>
<span>List</span>
<span>有序索引集,类似</span><code>JavaScript</code><span>中的</span><code>Array</code>
<span>Map</span>
<span>无序索引集,类似</span><code>JavaScript</code><span>中的</span><code>Object</code>
<span>OrderedMap</span>
<span>有序的</span><code>Map</code><span>,根据数据的</span><code>set()</code><span>进行排序</span>
<span>Set</span>
<span>没有重复值的集合</span>
<span>OrderedSet</span>
<span>有序的</span><code>Set</code><span>,根据数据的</span><code>add</code><span>进行排序</span>
<span>Stack</span>
<span>有序集合,支持使用</span><code>unshift()</code><span>和</span><code>shift()</code><span>添加和删除</span>
<span>Range()</span>
<span>返回一个</span><code>Seq.Indexed</code><span>类型的集合,这个方法有三个参数,</span><code>start</code><span>表示开始值,默认值为</span><code>0</code><span>,</span><code>end</code><span>表示结束值,默认为无穷大,</span><code>step</code><span>代表每次增大的数值,默认为</span><code>1</code><span>.如果</span><code>start = end</code><span>,则返回空集合</span>
<span>Repeat()</span>
<span>返回一个</span><code>vSeq.Indexe</code><span>类型的集合,这个方法有两个参数,</span><code>value</code><span>代表需要重复的值,</span><code>times</code><span>代表要重复的次数,默认为无穷大</span>
<span>Record</span>
<span>一个用于生成</span><code>Record</code><span>实例的类。类似于</span><code>JavaScript</code><span>的</span><code>Object</code><span>,但是只接收特定字符串为</span><code>key</code><span>,具有默认值</span>
<span>Seq</span>
<span>序列,但是可能不能由具体的数据结构支持</span>
<span>Collection</span>
<span>是构建所有数据结构的基类,不可以直接构建</span>
<h2 data-source-line="24">API使用</h2>
<h3 data-source-line="27">fromJS()</h3>
<span>作用:深度的将数组转换成</span><code>Immutable Lists</code><span>,将对象转换成</span><code>Immutable Maps</code>
<ul data-source-line="31"><li>用法:<code>fromJS(value, converter)</code></li></ul>
<span>值得注意的是,将</span><code>JS object</code><span>转换成</span><code>Immutable Maps</code><span>时, JS对象的属性永远都是字符串,即使写为没有字符串的简写形式</span>
例子
<pre data-source-line="35"><code>Immutable.fromJS({<br> a: {<br> b: [<span>1</span>, <span>2</span>, <span>3</span>],<br> c: <span>40</span><br> }<br>});<br><span>// 得到</span><br><span>Map</span> {<br> <span>"a"</span>: <span>Map</span> {<br> <span>"b"</span>: List [<span>1</span>, <span>2</span>, <span>3</span>],<br> <span>"c"</span>: <span>40</span><br> }<br>}</code></pre>
<h3 data-source-line="52">toJS()</h3>
<span>作用:将一个</span><code>Immutable</code><span>数据转换为</span><code>JS</code><span>类型的数据</span>
<ul data-source-line="56"><li>用法:<code>value.toJS()</code></li></ul>
<h3 data-source-line="58">is()</h3>
<span>作用:对两个对象进行比较</span>
<ul data-source-line="62"><li>用法:<code>is(map1,map2)</code></li></ul>
例子
<pre data-source-line="68" data-initialized="true" data-gclp-id="37"><code><span>import</span> { Map, is } <span>from</span> <span>'immutable'</span><br>const map1 = Map({ a: 1, b: 1, c: 1 })<br>const map2 = Map({ a: 1, b: 1, c: 1 })<br>map1 === map2 //false<br>Object.is(map1, map2) // false<br>is(map1, map2) // true 只检测值是否相等</code></pre>
<h3 data-source-line="84">List 和 Map</h3>
<h4 data-source-line="86"><span> </span>创建</h4>
<span>List() 和 Map()</span>
<span>List是有序索引密集的集合,和JS中的Array很像</span>
<span>作用:用来创建一个新的</span><code>List</code><span>/</span><code>Map</code><span>对象</span>
<span>List.of() 和 Map.of()</span>
<span>作用:创建一个新的包含</span><code>value</code><span>的</span><code>List</code><span>/</span><code>Map</code><span>对象</span>
<h4 data-source-line="126"><span> </span>判断</h4>
<span>List.isList() 和 Map.isMap()</span>
<span>作用:判断一个数据结构是不是</span><code>List</code><span>/</span><code>Map</code><span>类型</span>
<h4 data-source-line="140">长度</h4>
<span>size</span>
<span>作用:获取</span><code>List</code><span>/</span><code>Map</code><span>的长度</span>
<h4 data-source-line="146"><span> </span>数据读取</h4>
<span>get() 、 getIn()</span>
<span>作用:获取数据结构中的数据</span>
<span>has() 、 hasIn()</span>
<span>作用:判断是否存在某一个</span><code>key</code>
例子
<pre data-source-line="158" data-initialized="true" data-gclp-id="38"><code>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,{a:<span>4</span>,b:<span>5</span>}]).has(<span>'0'</span>); <span>//true</span><br>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,{a:<span>4</span>,b:<span>5</span>}]).has(<span>'0'</span>); <span>//true</span><br>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,{a:<span>4</span>,b:<span>5</span>}]).hasIn([<span>3</span>,<span>'b'</span>]) <span>//true</span></code></pre>
<span>includes()</span>
<span>作用:判断是否存在某一个</span><code>value</code>
例子
<pre data-source-line="170" data-initialized="true" data-gclp-id="39"><code>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,{a:<span>4</span>,b:<span>5</span>}]).includes(<span>2</span>); <span>//true</span><br>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,{a:<span>4</span>,b:<span>5</span>}]).includes(<span>'2'</span>); <span>//false 不包含字符2</span><br>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,{a:<span>4</span>,b:<span>5</span>}]).includes(<span>5</span>); <span>//false </span><br>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,{a:<span>4</span>,b:<span>5</span>}]).includes({a:<span>4</span>,b:<span>5</span>}) <span>//false</span><br>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,{a:<span>4</span>,b:<span>5</span>}]).includes(Immutable.fromJS({a:<span>4</span>,b:<span>5</span>})) <span>//true</span></code></pre>
<span>first() 、 last()</span>
<span>作用:用来获取第一个元素或者最后一个元素,若没有则返回</span><code>undefined</code>
例子
<pre data-source-line="182" data-initialized="true" data-gclp-id="40"><code>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,{a:<span>4</span>,b:<span>5</span>}]).first()<span>//1</span><br>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,{a:<span>4</span>,b:<span>5</span>}]).last()<span>//{a:4,b:5}</span><br><br>Immutable.fromJS({a:<span>1</span>,b:<span>2</span>,c:{d:<span>3</span>,e:<span>4</span>}}).first() <span>//1</span><br>Immutable.fromJS({a:<span>1</span>,b:<span>2</span>,c:{d:<span>3</span>,e:<span>4</span>}}).first() <span>//{d:3,e:4}</span></code></pre>
<h4 data-source-line="190">数据修改</h4>
<span>set()</span>
<span>作用:设置第一层</span><code>key</code><span>、</span><code>index</code><span>的值</span>
语法
<pre data-source-line="200" data-initialized="true" data-gclp-id="41"><code>set(index: number, value: T): List<T><br>set(key: K, value: V): <span>this</span></code></pre>
<span>setIn()</span>
<span>作用:设置深层结构中某属性的值</span>
语法
<pre data-source-line="215"><code>setIn(keyPath: Iterable<<span>any</span>>, <span>value</span>: <span>any</span>): this</code></pre>
<span>删除 delete</span>
<span>作用:用来删除第一层结构中的属性</span>
语法
<pre data-source-line="227" data-initialized="true" data-gclp-id="43"><code><span>delete</span>(index: number): List<T> <span>//List</span><br><span>delete</span>(key: K): <span>this</span> <span>//Map</span></code></pre>
<span>deleteIn()</span>
<span>用来删除深层数据,用法参考setIn</span>
<span>deleteAll() (Map独有,List没有)</span>
<span>作用:用来删除Map中的多个key</span>
语法
<span>deleteAll(keys: Iterable<K>): this</span>
例子
<pre data-source-line="244" data-initialized="true" data-gclp-id="45"><code><span>const</span> names = <span>Map</span>({ a: <span>"Aaron"</span>, b: <span>"Barry"</span>, c: <span>"Connor"</span> })<br>names.deleteAll([ <span>'a'</span>, <span>'c'</span> ])<br><span>// Map { "b": "Barry" }</span></code></pre>
<span>更新 update()</span>
<span>作用:对对象中的某个属性进行更新,可对原数据进行相关操作</span>
例子
<pre data-source-line="259" data-initialized="true" data-gclp-id="46"><code><span>////List</span><br><span>const</span> list = List([ <span>'a'</span>, <span>'b'</span>, <span>'c'</span> ])<br><span>const</span> result = list.update(<span>2</span>, val => val.toUpperCase())<br><br><span>///Map</span><br><span>const</span> aMap = <span>Map</span>({ key: <span>'value'</span> })<br><span>const</span> newMap = aMap.update(<span>'key'</span>, value => value + value)</code></pre>
<span>清除 clear()</span>
<span>作用:清除所有数据</span>
例子
<pre data-source-line="275" data-initialized="true" data-gclp-id="47"><code><span><span>Map</span><span>({ key: <span>'value'</span> })</span></span>.<span><span>clear</span><span>()</span></span> <span>//Map</span><br><span><span>List</span><span>([ <span>1</span>, <span>2</span>, <span>3</span>, <span>4</span> ])</span></span>.<span><span>clear</span><span>()</span></span> <span>// Lis</span></code></pre>
<h4 data-source-line="280">List中的各种删除与插入</h4>
<code>List</code><span>对应的数据结构是</span><code>js</code><span>中的数组,所以数组的一些方法在</span><code>Immutable</code><span>中也是通用的,比如</span><code>push</code><span>,</span><code>pop</code><span>,</span><code>shift</code><span>,</span><code>unshift</code><span>,</span><code>insert</code>
<ul data-source-line="285"><li><code>push()</code>:在<code>List</code>末尾插入一个元素</li><li><code>pop()</code>: 在<code>List</code>末尾删除一个元素</li><li><code>unshift</code>: 在<code>List</code>首部插入一个元素</li><li><code>shift</code>: 在<code>List</code>首部删除一个元素</li><li><code>insert</code>:在<code>List</code>的<code>index</code>处插入元素</li></ul>
例子
<pre data-source-line="291" data-initialized="true" data-gclp-id="48"><code>List([ <span>0</span>, <span>1</span>, <span>2</span>, <span>3</span>, <span>4</span> ]).insert(<span>6</span>, <span>5</span>) <br><span>//List [ 0, 1, 2, 3, 4, 5 ]</span><br>List([ <span>1</span>, <span>2</span>, <span>3</span>, <span>4</span> ]).push(<span>5</span>)<br><span>// List [ 1, 2, 3, 4, 5 ]</span><br>List([ <span>1</span>, <span>2</span>, <span>3</span>, <span>4</span> ]).pop()<br><span>// List[ 1, 2, 3 ]</span><br>List([ <span>2</span>, <span>3</span>, <span>4</span>]).unshift(<span>1</span>);<br><span>// List [ 1, 2, 3, 4 ]</span><br>List([ <span>0</span>, <span>1</span>, <span>2</span>, <span>3</span>, <span>4</span> ]).shift();<br><span>// List [ 1, 2, 3, 4 ]</span></code></pre>
<h4 data-source-line="307">关于merge</h4>
<span>merge</span>
<span>作用:浅合并,新数据与旧数据对比,旧数据中不存在的属性直接添加,就数据中已存在的属性用新数据中的覆盖</span>
<span>mergrWith</span>
<span>作用:自定义浅合并,可自行设置某些属性的值</span>
<span>mergeIn</span>
<span>作用:对深层数据进行浅合并</span>
<span>mergeDeep</span>
<span>作用:深合并,新旧数据中同时存在的的属性为新旧数据合并之后的数据</span>
<span>mergeDeepIn</span>
<span>作用:对深层数据进行深合并</span>
<span>mergrDeepWith</span>
<span>作用:自定义深合并,可自行设置某些属性的值</span>
<ul data-source-line="333"><li>这里用一段示例彻底搞懂merge,此示例为Map结构,List与Map原理相同</li></ul>
<pre data-source-line="335" data-initialized="true" data-gclp-id="49"><code><span>const</span> Map1 = Immutable.fromJS({a:<span>111</span>,b:<span>222</span>,c:{d:<span>333</span>,e:<span>444</span>}});<br> <span>const</span> Map2 = Immutable.fromJS({a:<span>111</span>,b:<span>222</span>,c:{e:<span>444</span>,f:<span>555</span>}});<br><br> <span>const</span> Map3 = Map1.merge(Map2);<br> <span>//Map {a:111,b:222,c:{e:444,f:555}}</span><br> <span>const</span> Map4 = Map1.mergeDeep(Map2);<br> <span>//Map {a:111,b:222,c:{d:333,e:444,f:555}}</span><br> <span>const</span> Map5 = Map1.mergeWith((oldData,newData,key)=>{<br> <span>if</span>(key === <span>'a'</span>){<br> <span>return</span> <span>666</span>;<br> }<span>else</span>{<br> <span>return</span> newData<br> }<br> },Map2);<br> <span>//Map {a:666,b:222,c:{e:444,f:555}}</span></code></pre>
<h4 data-source-line="353">序列算法</h4>
<span>concat()</span>
<span>作用:对象的拼接,用法与js数组中的concat()相同,返回一个新的对象</span>
例子
<span>const List = list1.concat(list2)</span>
<span>map()</span>
<span>作用:遍历整个对象,对</span><code>Map/List</code><span>元素进行操作,返回一个新的对象</span>
例子
<pre data-source-line="367"><code>Map({a:1,b:2}).map(val=>10*val)<br>//Map{a:10,b:20}</code></pre>
<span>Map特有的mapKey()</span>
<span>作用:遍历整个对象,对Map元素的key进行操作,返回一个新的对象。</span>
例子
<pre data-source-line="378"><code><span><span>Map</span><span>({a:<span>1</span>,b:<span>2</span>})</span></span>.<span><span>mapKey</span><span>(val=>val+<span>'l'</span>)</span></span><br><span>//Map{al:10,bl:20}</span></code></pre>
<span>Map特有的mapEntries()</span>
<span>作用:遍历整个对象,对Map元素的key和value同时进行操作,返回一个新的对象。Map的map()也可实现此功能</span>
例子
<pre data-source-line="389"><code>Map({a:<span>1</span>,b:<span>2</span>}).<span>map</span>((key,val)=>{<br> <span>return</span> [key+<span>'l'</span>,val*<span>10</span>]<br>})<br><span>//Map{al:10,bl:20}</span></code></pre>
<span>过滤 filter</span>
<span>作用:返回一个新的对象,包括所有满足过滤条件的元素</span>
<ul data-source-line="409"><li>还有一个<code>filterNot()</code>方法,与此方法正好相反</li></ul>
例子
<pre data-source-line="402"><code>Map({a:<span>1</span>,b:<span>2</span>}).filter((key,<span><span>val</span>)</span>=>{<br> <span>return</span> <span><span>val</span></span> == <span>2</span><br>})<br><span>//Map{b:2}</span></code></pre>
<span>反转 reverse</span>
<span>作用:将数据的结构进行反转</span>
例子
<pre data-source-line="417"><code>Immutable.fromJS([<span>1</span>, <span>2</span>, <span>3</span>, <span>4</span>, <span>5</span>]).reverse();<br><span>// List [5,4,3,2,1]</span><br>Immutable.fromJS({a:<span>1</span>,b:{c:<span>2</span>,d:<span>3</span>},e:<span>4</span>}).recerse();<br><span>//Map {e:4,b:{c:2,d:3},a:1}</span></code></pre>
<span>排序 sort & sortBy</span>
<span>作用:对数据结构进行排序</span>
例子
<pre data-source-line="428"><code><span>///List</span><br>Immutable.fromJS([<span>4</span>,<span>3</span>,<span>5</span>,<span>2</span>,<span>6</span>,<span>1</span>]).sort()<br><span>// List [1,2,3,4,5,6]</span><br>Immutable.fromJS([<span>4</span>,<span>3</span>,<span>5</span>,<span>2</span>,<span>6</span>,<span>1</span>]).sort((a,b)=>{<br> <span>if</span> (a < b) { <span>return</span> -<span>1</span>; }<br> <span>if</span> (a > b) { <span>return</span> <span>1</span>; }<br> <span>if</span> (a === b) { <span>return</span> <span>0</span>; }<br>})<br><span>// List [1,2,3,4,5,6]</span><br>Immutable.fromJS([{a:<span>3</span>},{a:<span>2</span>},{a:<span>4</span>},{a:<span>1</span>}]).sortBy((val,index,obj)=>{<br> <span>return</span> val.get(<span>'a'</span>)<br>},(a,b)=>{<br> <span>if</span> (a < b) { <span>return</span> -<span>1</span>; }<br> <span>if</span> (a > b) { <span>return</span> <span>1</span>; }<br> <span>if</span> (a === b) { <span>return</span> <span>0</span>; }<br>})<br><span>//List [ {a:3}, {a:2}, {a:4}, {a:1} ]</span><br><br><span>//Map</span><br><br>Immutable.fromJS( {b:<span>1</span>, a: <span>3</span>, c: <span>2</span>, d:<span>5</span>} ).sort()<br><span>//Map {b: 1, c: 2, a: 3, d: 5}</span><br>Immutable.fromJS( {b:<span>1</span>, a: <span>3</span>, c: <span>2</span>, d:<span>5</span>} ).sort((a,b)=>{<br> <span>if</span> (a < b) { <span>return</span> -<span>1</span>; }<br> <span>if</span> (a > b) { <span>return</span> <span>1</span>; }<br> <span>if</span> (a === b) { <span>return</span> <span>0</span>; }<br>})<br><span>//Map {b: 1, c: 2, a: 3, d: 5}</span><br>Immutable.fromJS( {b:<span>1</span>, a: <span>3</span>, c: <span>2</span>, d:<span>5</span>} ).sortBy((value, key, obj)=> {<br> <span>return</span> value<br>})<br><span>//Map {b: 1, c: 2, a: 3, d: 5}</span></code></pre>
<span>分组 groupBy</span>
<span>作用:对数据进行分组</span>
<pre data-source-line="467"><code><span>const</span> listOfMaps = List([<br> <span>Map</span>({ v: <span>0</span> }),<br> <span>Map</span>({ v: <span>1</span> }),<br> <span>Map</span>({ v: <span>1</span> }),<br> <span>Map</span>({ v: <span>0</span> }),<br> <span>Map</span>({ v: <span>2</span> })<br>])<br><span>const</span> groupsOfMaps = listOfMaps.groupBy(x => x.get(<span>'v'</span>))<br><span>// Map {</span><br><span>// 0: List [ Map{ "v": 0 }, Map { "v": 0 } ],</span><br><span>// 1: List [ Map{ "v": 1 }, Map { "v": 1 } ],</span><br><span>// 2: List [ Map{ "v": 2 } ],</span><br><span>// }</span></code></pre>
<h4 data-source-line="483">查找数据</h4>
<span>indexOf() 、 lastIndexOf 。Map不存在此方法</span>
<span>作用:和js数组中的方法相同,查找第一个或者最后一个</span><code>value</code><span>的</span><code>index</code><span>值,找不到则返回</span><code>-1</code>
例子
<pre data-source-line="491"><code>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]).indexof(<span>3</span>) <span>//2</span><br>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]).lastIndexof(<span>3</span>) <span>//2</span></code></pre>
<span>findIndex() 、 findLastIndex() 。Map不存在此方法</span>
<span>作用:查找满足要求的元素的index值</span>
例子
<pre data-source-line="501"><code>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]).findIndex((value,index,array)=>{<br> <span>return</span> value%<span>2</span> === <span>0</span>;<br>}) <span>// 1</span><br>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]).findLastIndex((value,index,array)=>{<br> <span>return</span> index%<span>2</span> === <span>0</span>;<br>}) <span>// 3</span></code></pre>
<span>find() 、 findLast()</span>
<span>作用:查找满足条件的元素的value值</span>
例子
<pre data-source-line="516"><code>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]).find((value,index,array)=>{<br> <span>return</span> value%<span>2</span> === <span>0</span>;<br>}) <span>// 2</span><br><br>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]).findLast((value,index,array)=>{<br> <span>return</span> value%<span>2</span> === <span>0</span>;<br>}) <span>// 4</span></code></pre>
<span>findKey() 、 findLastKey()</span>
<span>作用:查找满足条件的元素的key值</span>
例子
<pre data-source-line="532"><code>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]).findKey((value,index,array)=>{<br> <span>return</span> value%<span>2</span> === <span>0</span>;<br>}) <span>// 1</span><br><br>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]).findLastKey((value,index,array)=>{<br> <span>return</span> value%<span>2</span> === <span>0</span>;<br>}) <span>// 3</span></code></pre>
<span>findEntry() 、 findLastEntry()</span>
<span>作用:查找满足条件的元素的键值对<span> </span></span><code>key:value</code>
例子
<pre data-source-line="548"><code>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]).findEntry((value,index,array)=>{<br> <span>return</span> value%<span>2</span> === <span>0</span>;<br>}) <span>// [1,2]</span><br><br>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]).findLastEntry((value,index,array)=>{<br> <span>return</span> value%<span>2</span> === <span>0</span>;<br>}) <span>// [3,4]</span></code></pre>
<span>keyOf() lastKeyOf()</span>
<span>作用:查找某一个value对应的key值</span>
例子
<pre data-source-line="565"><code>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]).keyOf(<span>2</span>) <span>//1</span><br>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]).lastKeyOf(<span>2</span>) <span>//1</span></code></pre>
<span>max() 、 maxBy()</span>
<span>作用:查找最大值</span>
例子
<pre data-source-line="576"><code>Immutable.fromJS([<span>1</span>, <span>2</span>, <span>3</span>, <span>4</span>]).max() <span>//4</span><br><br>Immutable.fromJS([{a;<span>1</span>},{a:<span>2</span>},{a: <span>3</span>},{a:<span>4</span>}]).maxBy((value,index,array)=>{<br> <span>return</span> value.get(<span>'a'</span>)<br>}) <span>//{a:4}</span></code></pre>
<span>min() 、 minBy()</span>
<span>作用:查找最小值</span>
例子
<pre data-source-line="590"><code>Immutable.fromJS([<span>1</span>, <span>2</span>, <span>3</span>, <span>4</span>]).min() <span>//1</span><br><br>Immutable.fromJS([{a;<span>1</span>},{a:<span>2</span>},{a: <span>3</span>},{a:<span>4</span>}]).minBy((value,index,array)=>{<br> <span>return</span> value.get(<span>'a'</span>)<br>}) <span>//{a:1}</span></code></pre>
<h4 data-source-line="598">创建子集</h4>
<span>slice()</span>
<span>作用: 和原生js中数组的slice数组一样,包含两个参数,start和end,start代表开始截取的位置,end代表结束的位置,不包括第end的元素。若不包括end,则返回整个对象,若end为负数,则返回(start,length-end)对应的数据。若start只有一个并且为负数,则返回最后的end个元素</span>
例子
<pre data-source-line="604"><code>Immutable.fromJS([<span>1</span>, <span>2</span>, <span>3</span>, <span>4</span>]).slice(<span>0</span>); <span>//[1,2,3,4]</span><br>Immutable.fromJS([<span>1</span>, <span>2</span>, <span>3</span>, <span>4</span>]).slice(<span>0</span>,<span>2</span>); <span>//[1,2]</span><br>Immutable.fromJS([<span>1</span>, <span>2</span>, <span>3</span>, <span>4</span>]).slice(-<span>2</span>); <span>//[3,4]</span><br>Immutable.fromJS([<span>1</span>, <span>2</span>, <span>3</span>, <span>4</span>]).slice(<span>0</span>,-<span>2</span>); <span>//[1,2]</span></code></pre>
<span>rest()</span>
<span>作用:返回除第一个元素之外的所有元素</span>
例子
<span>Immutable.fromJS([1, 2, 3, 4]).rest()//[2,3,4]</span>
<span>butLast()</span>
<span>作用:返回除最后一个元素之外的所有元素</span>
例子
<span>Immutable.fromJS([1, 2, 3, 4]).rest()//[1,2,3]</span>
<span>skip()</span>
<span>作用:有一个参数n, 返回截掉前n个元素之后剩下的所有元素</span>
例子
<span>Immutable.fromJS([1, 2, 3, 4]).skip(1)//[2,3,4]</span>
<span>skipLast()</span>
<span>作用:有一个参数n, 返回截掉最后n个元素之后剩下的所有元素</span>
<ul data-source-line="633"><li>用法:<code>Immutable.fromJS([1, 2, 3, 4]).skip(1)//[1,2,3]</code></li></ul>
<span>skipWhile()</span>
<span>作用:返回从第一次返回false之后的所有元素</span>
例子
<pre data-source-line="639"><code>Immutable.fromJS([<span>1</span>, <span>2</span>, <span>3</span>, <span>4</span>]).skipWhile(list.skipWhile((value,index,list)=>{<br> <span>return</span> value > <span>2</span>;<br>}))<span>// [1,2,3,4]</span><br>skipUntil()</code></pre>
<span>take()</span>
<span>作用:有一个参数n, 返回前n个元素</span>
<ul data-source-line="658"><li>用法:<code>Immutable.fromJS([1, 2, 3, 4]).take(2)//[1,2]</code></li></ul>
<span>takeLast()</span>
<span>作用:有一个参数n, 返回最后n个元素</span>
<ul data-source-line="664"><li>用法:<code>Immutable.fromJS([1, 2, 3, 4]).takeLast(2)//[3,4]</code></li></ul>
<span>takeWhile()</span>
<ul data-source-line="668"><li>作用:返回从第一次返回false之前的所有元素</li></ul>
例子
<pre data-source-line="670"><code>Immutable.fromJS([<span>1</span>, <span>2</span>, <span>3</span>, <span>4</span>]).skipWhile(list.takeWhile((value,index,list)=>{<br> <span>return</span> value > <span>2</span>;<br>}))<span>// []</span><br>takeUntil()</code></pre>
<h4 data-source-line="684"><span> </span>处理数据</h4>
<span>reduce()</span>
<span>作用:和</span><code>js</code><span>中数组中的</span><code>reduce</code><span>相同,按索引升序的顺序处理元素</span>
例子
<pre data-source-line="692"><code>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]).reduce((pre,next,index,arr)=>{<br> <span>console</span>.log(pre+next)<br> <span>return</span> pre+next; <br>})<br><span>// 3 6 10</span></code></pre>
<span>reduceRight()</span>
<span>作用:和js中数组中的reduce相同,按索引降序的顺序处理元素</span>
例子
<pre data-source-line="706"><code>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]).reduceRight((pre,next,index,arr)=>{<br> <span>console</span>.log(pre+next)<br> <span>return</span> pre+next; <br>})<br><span>// 7 9 10</span></code></pre>
<span>every()</span>
<span>作用:判断整个对象总中所有的元素是不是都满足某一个条件,都满足返回true,反之返回false。</span>
例子
<pre data-source-line="720"><code>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]).every((value,index,arr)=>{<br> <span>return</span> value > <span>2</span><br>}) <span>// false</span></code></pre>
<span>some()</span>
<span>作用:判断整个对象总中所有的元素是不是存在满足某一个条件的元素,若存在返回true,反之返回false。</span>
例子
<pre data-source-line="732"><code>Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]).some((value,index,arr)=>{<br> <span>return</span> value > <span>2</span><br>}) <span>// true</span></code></pre>
<span>join()</span>
<span>作用:同js中数组的join方法。把准换为字符串</span>
<ul data-source-line="742"><li>用法:<code>Immutable.fromJS([1,2,3,4]).join(',') //1,2,3,4</code></li></ul>
<span>isEmpty()</span>
<ul data-source-line="746"><li>作用:判断是否为空</li></ul>
用法
<pre data-source-line="750"><code>Immutable.fromJS([]).isEmpty(); <span>// true</span><br>Immutable.fromJS({}).isEmpty(); <span>// true</span><br>count()</code></pre>
<span>countBy()</span>
<ul data-source-line="775"><li>作用:与count不同的是,countBy返回一个对象</li></ul>
用法
<pre data-source-line="779"><code><span>const</span> list = Immutable.fromJS([<span>1</span>,<span>2</span>,<span>3</span>,<span>4</span>]);<br><span>const</span> map = Immutable.fromJS({a:<span>1</span>,b:<span>2</span>,c:<span>3</span>,d:<span>4</span>});<br><br>list.countBy((value,index,list)=>{<br> <span>return</span> value > <span>2</span>;<br>} <span>//{false: 2, true: 2}</span><br><br>map.countBy((value,index,list)=>{<br> <span>return</span> value > <span>2</span>;<br>} <span>//{false: 2, true: 2}</span></code></pre>
0 条评论
下一页