国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

es6中Set和Map的對比介紹(附代碼)

來源:懂視網 責編:小采 時間:2020-11-27 19:29:26
文檔

es6中Set和Map的對比介紹(附代碼)

es6中Set和Map的對比介紹(附代碼):本篇文章給大家帶來的內容是關于es6中Set和Map的對比介紹(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。Set1、add()方法和size屬性{ let list = new Set(); // add()方法向Set數據添加元素 list.add(5); li
推薦度:
導讀es6中Set和Map的對比介紹(附代碼):本篇文章給大家帶來的內容是關于es6中Set和Map的對比介紹(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。Set1、add()方法和size屬性{ let list = new Set(); // add()方法向Set數據添加元素 list.add(5); li

本篇文章給大家帶來的內容是關于es6中Set和Map的對比介紹(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

Set

1、add()方法和size屬性

{
 let list = new Set();
 // add()方法向Set數據添加元素
 list.add(5);
 list.add(7);
 // size屬性返回數據的長度
 console.log(list.size); // 2

 let arr = [1, 2, 3, 4, 5];
 let set = new Set(arr);
 console.log(set, set.size); // Set(5) {1, 2, 3, 4, 5} 5
}

2.Set的元素必須是唯一的

{
 let list = new Set();
 list.add(1);
 list.add(2);
 list.add(1); // 重復元素不會添加進去
 console.log(list); // Set(2) {1, 2}

 // 數組去重
 let arr = [1, 2, 3, 1, '2'];
 let list2 = new Set(arr);
 console.log(list2); // Set(4) {1, 2, 3, "2"}
}

3.has(),delete(),clear()

{
 let arr = ['add', 'delete', 'clear', 'has'];
 let list = new Set(arr);
 console.log(list.has('add')); // true
 list.delete('add');
 console.log(list); // Set(3) {"delete", "clear", "has"}
 list.clear();
 console.log(list); // Set(0) {}
}

4.Set的遍歷

{
 let arr = ['add', 'delete', 'clear', 'has'];
 let list = new Set(arr);
 // Set結構的數據,key和value是同一個值
 for (let value of list) {
 console.log('value', value); // 'add' 'delete' 'clear' 'has'
 }
 for (let key of list.keys()) {
 console.log('keys', key); // 'add' 'delete' 'clear' 'has'
 }
 for (let value of list.values()) {
 console.log('values', value); // 'add' 'delete' 'clear' 'has'
 }
 for (let [key, value] of list.entries()) {
 console.log('entries', key, value);
 }
 list.forEach(function (item) {
 console.log(item); // 'add' 'delete' 'clear' 'has'
 });
}

WeakSet

WeakSet和Set的不同點:

  1. WeakSet的元素只能是對象,不能是數值、字符串、布爾值...

  2. WeakSet中的對象都是弱引用,垃圾回收機制不考慮WeakSet對該對象的引用。WeakSet里面的引用,都不計入垃圾回收機制,所以不會引發內存泄漏的問題。所以,WeakSet適合臨時存放一組對象,以及存放跟對象綁定的信息。只要這些對象在外部消失,它在WeakSet里面的引用就會自動消失。

{
 let weakList = new WeakSet();
 let arg = {name: 'hhh'};
 weakList.add(arg); // WeakSet的元素只能是對象
 // weakList.add(2); // Uncaught TypeError: Invalid value used in weak set
 console.log(weakList); // WeakSet {{name: 'hhh'}}
 // 注意:WeakSet沒有size屬性,沒有clear方法,不能遍歷。其他的用法和Set相同
}

Map

1.set()方法和get()方法

{
 let map = new Map();
 let arr = ['123'];
 // Map的key可以是任意數據類型
 map.set(arr, 456); // map.set(key, value),這里用數組作為key,添加一個值為456的元素
 console.log(map.get(arr)); // 456
}

2.Map的另一種定義方式

{
 let map = new Map([['a', 123], ['b', 456]]); // 接收一個數組作為參數,數組的每一項為:[key,value]
 console.log(map); // Map(2) {"a" => 123, "b" => 456}
 console.log(map.size); // 2
 console.log(map.has('b')); // true
 map.delete('a');
 console.log(map); // Map(1) {"b" => 456}
 map.clear();
 console.log(map); // Map(0) {}
}

WeakMap

WeakMap和Map的不同點:

  1. WeakMap的key只能是對象

  2. WeakMap的鍵名所引用的對象都是弱引用,垃圾回收機制不考慮對此對象的引用。(注意,WeakMap弱引用的只是鍵名,而不是鍵值。鍵值依然是正常引用。)基本上,如果你要往對象上添加數據,又不想干擾垃圾回收機制,就可以使用WeakMap。

{
 let weakmap = new WeakMap();
 let o = {};
 weakmap.set(o, 123);
 console.log(weakmap.get(o)); // 123
 // 注意:WeakMap沒有size屬性,沒有clear方法,不能遍歷。類似于Set與WeakSet的區別
}

Set,Map和Array,Object的對比

Map與Array對比

{
 // 數據結構橫向對比,增 查 改 刪
 let map = new Map();
 let array = [];

 // 增
 map.set('t', 1);
 array.push({'t': 1});
 console.log(map, array); // {"t" => 1} [{'t': 1}]

 // 查
 let map_exist = map.has('t');
 let array_exist = array.find(item => item.t);
 console.log(map_exist, array_exist); // true {t: 1}

 // 改
 map.set('t', 2);
 array.forEach(item => item.t ? item.t = 2 : '');
 console.log(map, array); // {"t" => 2} [{'t': 2}]

 // 刪
 map.delete('t');
 let index = array.findIndex(item => item.t);
 array.splice(index, 1);
 console.log(map, array); // {} []
}

Set與Array對比

{
 let set = new Set();
 let array = [];
 let item = {'t': 1};

 // 增
 set.add(item);
 array.push(item);
 console.log(set, array); // {{'t': 1}} [{'t': 1}]

 // 查
 let set_exist = set.has(item);
 let array_exist = array.find(item => item.t);
 console.log(set_exist, array_exist); // true {t: 1}

 // 改
 set.forEach(item => item.t ? item.t = 2 : '');
 array.forEach(item => item.t ? item.t = 2 : '');
 console.log(set, array); // {{'t': 2}} [{'t': 2}]

 // 刪
 set.forEach(item => item.t ? set.delete(item) : '');
 let index = array.findIndex(item => item.t);
 array.splice(index, 1);
 console.log(set, array); // {} []
}

Map,Set與Object對比

{
 let item = {t: 1};
 let map = new Map();
 let set = new Set();
 let obj = {};

 // 增
 map.set('t', 1);
 set.add(item);
 obj['t'] = 1;
 console.log(obj, map, set); // {t: 1} Map(1) {"t" => 1} Set(1) {{t: 1}}

 // 查
 console.log(map.has('t'), set.has(item), 't' in obj); // true true true

 // 改
 map.set('t', 2);
 item.t = 2;
 obj['t'] = 2;
 console.log(obj, map, set); // {t: 2} Map(1) {"t" => 2} Set(1) {{t: 2}}

 // 刪
 map.delete('t');
 set.delete(item);
 delete obj['t'];
 console.log(obj, map, set); // {} Map(0) {} Set(0) {}
}

建議:

  1. 優先使用map,不使用array,特別是復雜的數據結構

  2. 考慮數據唯一性,使用set,放棄array和obj

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

es6中Set和Map的對比介紹(附代碼)

es6中Set和Map的對比介紹(附代碼):本篇文章給大家帶來的內容是關于es6中Set和Map的對比介紹(附代碼),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。Set1、add()方法和size屬性{ let list = new Set(); // add()方法向Set數據添加元素 list.add(5); li
推薦度:
標簽: 代碼 map 對比
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 免费看男女做好爽好硬视频 | 欧美日韩国产亚洲一区二区三区 | 日韩欧美片 | 亚洲小说欧美激情另类 | 欧美精品v国产精品v日韩精品 | 伊人婷婷色 | 亚洲一区中文字幕 | 欧美日韩国产一区二区三区不卡 | 日韩欧美国产中文字幕 | 精品视频第一页 | 成人看的一级毛片 | 亚洲欧美在线免费观看 | 国产一级片视频 | 日韩精品一区在线观看 | 欧美极品尤物在线播放一级 | 亚洲人成网站999久久久综合 | 午夜精品久久久久久毛片 | 欧美日韩1区 | 一区二区三区视频 | 国产99视频精品草莓免视看 | 国产在线观看精品一区二区三区91 | 国产一级片在线 | 97成人免费视频 | 亚洲97 | 日韩在线免费播放 | 欧美成人日韩 | 黄网站色视频免费观看45分钟 | 美日韩中文字幕 | 亚洲精品国产综合一线久久 | 在线欧美日韩 | 亚洲尹人九九大色香蕉网站 | 91热成人精品国产免费 | 91热久久| 亚洲欧美另类色图 | 久久亚洲精选 | 色老头久久久久 | 国产精品免费观看视频 | 97久久精品一区二区三区 | 成人精品视频一区二区三区 | 在线 v亚洲 v欧美v 专区 | 国产不卡在线观看 |