Set甲脏、Map眶熬、WeakSet 和 WeakMap

你是我這一生等了半世未拆的禮物。

我的github: 李大玄
我的私人博客: 李大玄
我的npm開源庫: 李大玄
我的簡書: 李大玄
我的CSDN: 李大玄
我的掘金: 李大玄
嗶哩嗶哩: 李大玄

  1. 首先說說基本概念
  • Set
    成員唯一块请、無序且不重復
    [value, value]娜氏,鍵值與鍵名是一致的(或者說只有鍵值,沒有鍵名)
    可以遍歷负乡,方法有:add牍白、delete、has
  • WeakSet
    成員都是對象
    成員都是弱引用抖棘,可以被垃圾回收機制回收茂腥,可以用來保存DOM節(jié)點,不容易造成內(nèi)存泄漏
    不能遍歷切省,方法有add猎拨、delete、has
  • Map
    本質(zhì)上是鍵值對的集合召耘,類似集合
    可以遍歷国章,方法很多可以跟各種數(shù)據(jù)格式轉(zhuǎn)換
  • WeakMap
    只接受對象作為鍵名(null除外),不接受其他類型的值作為鍵名
    鍵名是弱引用芙盘,鍵值可以是任意的驯用,鍵名所指向的對象可以被垃圾回收,此時鍵名是無效的
    不能遍歷儒老,方法有g(shù)et蝴乔、set、has驮樊、delete

set

let s = new Set();
[2,3,5,4,5,2,2].forEach(x => s.add(x));
console.log(s); // {2,3,4,5}

console.log(s.has(2)); // true
console.log(s.has(6)); // false
s.delete(2); 
console.log(s); // {3,4,5}

map

可以便利, 也可以返回一個新數(shù)組

var users = [
    {name: "張含韻", "email": "zhang@email.com"},
    {name: "江一燕", "email": "jiang@email.com"},
    {name: "李小璐", "email": "li@email.com"}
  ];

  var emails = users.map(function (user) { return user.email; });

  console.log(emails.join(", ")); // zhang@email.com, jiang@email.com, li@email.com
  // Array.prototype擴展可以讓IE6-IE8瀏覽器也支持map方法:

  if (typeof Array.prototype.map != "function") {
    Array.prototype.map = function (fn, context) {
      var arr = [];
      if (typeof fn === "function") {
        for (var k = 0, length = this.length; k < length; k++) { 
          arr.push(fn.call(context, this[k], k, this));
        }
      }
      return arr;
    };
  }
  const a = users.map(item => {
    return item.name;
  })
  console.log(a);

WeakSet

let john = { name: "John" };

let weakMap = new WeakMap();
weakMap.set(john, "...");

john = null; // 覆蓋引用
// john 被從內(nèi)存刪除了

WeakMap 不支持迭代以及 keys()薇正,values() 和 entries() 方法。所以沒有辦法獲取 WeakMap 的所有鍵或值囚衔。

      WeakMap 只有以下的方法:
      weakMap.get(key)
      weakMap.set(key, value)
      weakMap.delete(key)
      weakMap.has(key)
 
例如挖腰,我們有用于處理用戶訪問計數(shù)的代碼。收集到的信息被存儲在 map 中:一個用戶對象作為鍵练湿,其訪問次數(shù)為值猴仑。當一個用戶離開時(該用戶對象將被垃圾回收機制回收),這時我們就不再需要他的訪問次數(shù)了鞠鲜。
復制代碼
// visitsCount.js
let visitsCountMap = new WeakMap(); // weakmap: user => visits count

// 遞增用戶來訪次數(shù)
function countUser(user) {
   let count = visitsCountMap.get(user) || 0;
   visitsCountMap.set(user, count + 1);
}

WeakSet

WeakSet 的表現(xiàn)類似:
 
  與 Set 類似宁脊,但是我們只能向 WeakSet 添加對象(而不能是原始值)断国。
  對象只有在其它某個(些)地方能被訪問的時候,才能留在 set 中榆苞。
  跟 Set 一樣稳衬,WeakSet 支持 add,has 和 delete 方法坐漏,但不支持 size 和 keys()薄疚,并且不可迭代。
 
let jack = {name: "jack"};
let weakSet = new WeakSet();
weakSet.add(jack, 22);
console.log( weakSet.has(jack) ); // true
weakSet.delete(jack);
console.log( weakSet );  // WeakSet {}

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末赊琳,一起剝皮案震驚了整個濱河市街夭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌躏筏,老刑警劉巖板丽,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異趁尼,居然都是意外死亡埃碱,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門酥泞,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砚殿,“玉大人,你說我怎么就攤上這事芝囤∷蒲祝” “怎么了?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵悯姊,是天一觀的道長羡藐。 經(jīng)常有香客問我,道長悯许,這世上最難降的妖魔是什么传睹? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮岸晦,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘睛藻。我一直安慰自己启上,他們只是感情好,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布店印。 她就那樣靜靜地躺著冈在,像睡著了一般。 火紅的嫁衣襯著肌膚如雪按摘。 梳的紋絲不亂的頭發(fā)上包券,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天纫谅,我揣著相機與錄音,去河邊找鬼溅固。 笑死付秕,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的侍郭。 我是一名探鬼主播询吴,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼亮元!你這毒婦竟也來了猛计?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤爆捞,失蹤者是張志新(化名)和其女友劉穎奉瘤,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體煮甥,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡盗温,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了苛秕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片肌访。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖艇劫,靈堂內(nèi)的尸體忽然破棺而出吼驶,到底是詐尸還是另有隱情,我是刑警寧澤店煞,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布蟹演,位于F島的核電站,受9級特大地震影響顷蟀,放射性物質(zhì)發(fā)生泄漏酒请。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一鸣个、第九天 我趴在偏房一處隱蔽的房頂上張望羞反。 院中可真熱鬧,春花似錦囤萤、人聲如沸昼窗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澄惊。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間掸驱,已是汗流浹背肛搬。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留毕贼,地道東北人温赔。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓,卻偏偏與公主長得像帅刀,于是被迫代替她去往敵國和親让腹。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容