セット:
値の配列のような、しかし、メンバーがユニークです。
集合関数は、配列(反復可能なインターフェースを有する付加的なデータ構造)を受信することができます
例// CONST =(1,2 ,. 3 ,. 4 ,. 4])を設定し、新しい新規SET; [... SET] // [1,2 ,. 3 ,. 4] //例つ CONST商品=新しいセット( )[1,2 ,. 3 ,. 4 ,. 5 ,. 5 ,. 5 ,. 5。]; 。items.size 5 // //例3 CONST新しい新しいSET =セット(document.querySelectorAll( 'DIV')); set.size // 56 //同様の constの新しい新しいSET =セット(); ドキュメント .querySelectorAll( 'DIV') .forEach(= div>のset.add(DIV)); set.size // 56
重複した配列を削除します。
重複した文字列を削除します
[...新しいセット( 'ababbcは')]。( '')に参加 // "ABC"
時間に加算値を設定し、変換のタイプはそれほど生じず、5
そして"5"
2つの異なる値です。設定された内部は、2つの値が異なるかどうかを決定する、「同じ値ゼロ等価」と呼ばれて使用されるアルゴリズム 、 厳密な等価演算子(に類似している===
)、主な違いはNaN
、それ自体に等しく、かつ正確に等価オペレータNaN
独自に等しくありません。
また、オブジェクトに特別な注意を払う必要があります。
方法の例:
add(value)
:構造自体を設定するために返すように値を追加します。delete(value)
:値を削除し、それが削除が成功したかどうかを示すブール値を返します。has(value)
:値があるかどうかを示すブール値を返しますSet
メンバー。clear()
:クリアすべてのメンバー、ノーリターン値。
s.add .add(2).add(2)(1); // 2回添加した(注) // 2 s.size (1)s.has真//の (2)真のs.has // s.has // falseに(3) s.delete(2); s.has(2)falseに//
比較対象の決意キー
//对象的写法 CONST性質= { '幅':1、 '高':1 }。 IF(プロパティ[someNameという]){ //何かを } //セット的写法 CONST性質=新しいセット()。 properties.add( '幅'); properties.add( '高さ'); (properties.has(someNameという))の場合{ //何かをします }
(アレイおよびアレイに類似)配列にArray.from。
同様に拡張オペレータのキーの重複排除
トラバーサル方法:
keys()
:キー歩行者の名前を返します。values()
:リターンキーウォーカーentries()
:キーと値のペアウォーカーを返します。forEach()
:使用コールバック関数は、各部材を横切ります
この方法は、多少類似オブジェクト、よりforEachのです。
キー:
keys
メソッド、values
メソッド、entries
メソッドの復帰は、訪問者オブジェクト(章の「イテレータオブジェクト」を参照)です。構造的セットキー名が存在しない、唯一のキー(またはキーの名前と値が同じ値である)ので、そうkeys
方法とvalues
全く同一の動作方法。
あなたはとメソッドのためのforEachを使用できるように設定しSymbol.iteartorを展開しているので:
forEach
この方法は、更に有していてもよい結合の内部処理機能を表す第2のパラメータthis
オブジェクト。
扩展运算符(...
)内部使用for...of
循环。
实现并集(Union)、交集(Intersect)和差集(Difference):
let a = new Set([1, 2, 3]); let b = new Set([4, 3, 2]); // 并集 let union = new Set([...a, ...b]); // Set {1, 2, 3, 4} // 交集 let intersect = new Set([...a].filter(x => b.has(x))); // set {2, 3} // 差集 let difference = new Set([...a].filter(x => !b.has(x))); // Set {1}
改变Set结构:
// 方法一 let set = new Set([1, 2, 3]); set = new Set([...set].map(val => val * 2)); // set的值是2, 4, 6 // 方法二 let set = new Set([1, 2, 3]); set = new Set(Array.from(set, val => val * 2)); // set的值是2, 4, 6
WeakSet 结构:
它与 Set 有两个区别。
首先,WeakSet 的成员只能是对象,而不能是其他类型的值。其次,WeakSet 中的对象都是弱引用,即垃圾回收机制不考虑 WeakSet 对该对象的引用,也就是说,如果其他对象都不再引用该对象,那么垃圾回收机制会自动回收该对象所占用的内存,不考虑该对象还存在于 WeakSet 之中。
WeakSet 适合临时存放一组对象,以及存放跟对象绑定的信息。只要这些对象在外部消失,它在 WeakSet 里面的引用就会自动消失。(WeakSet 不可遍历)
Map:
Object 本质上是键值对的集合(Hash 结构),但是传统上只能用字符串当作键。这给它的使用带来了很大的限制.
Map 类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。
const m = new Map(); const o = {p: 'Hello World'}; m.set(o, 'content') m.get(o) // "content" m.has(o) // true m.delete(o) // true m.has(o) // false
接收数组(数组转map):
set/map:
const set = new Set([ ['foo', 1], ['bar', 2] ]); const m1 = new Map(set); m1.get('foo') // 1 const m2 = new Map([['baz', 3]]); const m3 = new Map(m2); m3.get('baz') // 3
如果读取一个未知的键,则返回undefined
:
new Map().get('asfddfsasadf') // undefined
1.size: 成员数
2.set(key,value): 不是put 哦
3.get(key): 获取
4.has(key):是否在当前Map中
5.delete(key):删除某个键
6.clear:清空
遍历方法:(跟set一样)
keys()
:返回键名的遍历器。values()
:返回键值的遍历器。entries()
:返回所有成员的遍历器。forEach()
:遍历 Map 的所有成员。
// 等同于使用map.entries() for (let [key, value] of map) { console.log(key, value); }
map[Symbol.iterator] === map.entries // true
forEach:回调函数包涵三个参数,并且本身可以有第二个参数用来绑定this
数据结构转换:
Map转数组:
数组转Map
Map转对象:
function strMapToObj(strMap) { let obj = Object.create(null); for (let [k,v] of strMap) { obj[k] = v; } return obj; }
对象转Map:
function objToStrMap(obj) {
let strMap = new Map();
for (let k of Object.keys(obj)) {
strMap.set(k, obj[k]);
}
return strMap;
}
Map 转json:转换为对象后再转换为json
function strMapToJson(strMap) { return JSON.stringify(strMapToObj(strMap)); }
Map 的键名有非字符串,这时可以选择转为数组 JSON。
function mapToArrayJson(map) { return JSON.stringify([...map]); }
json 转map:先转换为对象,然后再转换为map
function jsonToStrMap(jsonStr) { return objToStrMap(JSON.parse(jsonStr)); }
WeakMap:整体类似map,但是与weakset一样,不能循环,并且只接收对象作为键名,指向的对象也不计入垃圾回收机制。
用途:
let myElement = document.getElementById('logo'); let myWeakmap = new WeakMap(); myWeakmap.set(myElement, {timesClicked: 0}); myElement.addEventListener('click', function() { let logoData = myWeakmap.get(myElement); logoData.timesClicked++; }, false);
myElement
是一个 DOM 节点,每当发生click
事件,就更新一下状态。我们将这个状态作为键值放在 WeakMap 里,对应的键名就是myElement
。一旦这个 DOM 节点删除,该状态就会自动消失,不存在内存泄漏风险。