ES6-15 map與set

Promise、Proxy、Map、Set這些ES6新增的api無法用babel實現語法降級,需要使用到polyfill

Set

  • 成員是唯一的,不能重復
  • 有iterator接口,可迭代
  • 具有iterator接口的所有類型,都能作為new Set()的參數,如類數組、數組
    在這里插入圖片描述
const myS = new Set()
console.log(myS)
myS.add(1) // 只能傳1個參數
console.log(myS)
myS.add(1) // 添加重復的則無效果,成員是唯一的
console.log(myS)
console.log(new Set([1])) // 初始化傳入數組

在這里插入圖片描述

  • 對引用值的判斷依然是地址是否相同
console.log(new Set([NaN,NaN])) // 只會添加一個NaN
const obj = {}
const o2 = obj
console.log(new Set([{}, {}])) // 不同 添加2個
console.log(new Set([obj, o2])) // 引用相同 添加1個

原型屬性及方法

size屬性返回長度

add方法返回set實例,鏈式調用

const myS = new Set()
myS.add(1).add(2)
console.log(myS)

在這里插入圖片描述

delete方法 返回值是刪除與否

const myS = new Set([1, 2, 3])
console.log(myS.delete(1)) // true
console.log(myS, myS.size) // Set(2) {2, 3} 2
console.log(myS.delete(1)) // false

clear方法

const myS = new Set([1, 2, 3])
console.log(myS.clear()) // undefined
console.log(myS) // Set(0) {}

has方法 判斷是否有該值

const myS = new Set([1, {}, 3])
console.log(myS.has(1)) // true
console.log(myS.has(4)) // false
console.log(myS.has({})) // false 

set和obj不一樣,他的操作是實時的,即使在操作前打印,看到的也是全部操作執行完的結果

遍歷方法 keys/values/entries

  • 由于 Set 結構沒有鍵名,只有鍵值(或者說鍵名和鍵值是同一個值),所以keys方法和values方法的行為完全一致。
const myS = new Set([1, 2, 3])
console.log(myS.keys()) // 鍵名的迭代器
console.log(myS.values()) // 鍵值的迭代器
console.log(myS.entries()) // 鍵值對的迭代器
for(let i of myS.keys()){console.log(i)
}
for(let i of myS.values()){console.log(i)
}
for(let i of myS.entries()){console.log(i)
}

在這里插入圖片描述

  • set實例本身也能遍歷
const myS = new Set([1, 2, 3])
for(let i of myS){console.log(i) // 1 2 3
}
console.log(Set.prototype[Symbol.iterator] === Set.prototype.values) // true
console.log(Set.prototype[Symbol.iterator] === Set.prototype.keys) // true

forEach方法

const myS = new Set([1, 2, 3])
myS.forEach((val, key, set) => {console.log(val, key, set)
})

在這里插入圖片描述

set轉數組/數組去重

  • 用…展開,再放入數組
const myS = new Set([1, 2, 3])
console.log([...myS]) // [1, 2, 3]
console.log([...new Set([2, 2, 3, 4, 5])]) // [2, 3, 4, 5]

和數組map方法結合使用

const myS = new Set([1, 2, 3])
const myS2 = new Set([...myS].map(item => item * 2))
console.log(myS2) // Set(3) {2, 4, 6}
const arr = [1, 0, 1, 2]
console.log(new Set([...arr].map(parseInt))) // Set(3) {1, NaN, 2}

和Array.from結合

let set = new Set([1, 2, 3]);
set = new Set(Array.from(set, val => val * 2));
// set的值是2, 4, 6

實現∩ ∪ 差集 filter has結合使用

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}// (a 相對于 b 的)差集
let difference = new Set([...a].filter(x => !b.has(x)));
// Set {1}

map

  • 鍵可以是對象
    在這里插入圖片描述
const m = {}
const x = {id:1}
const y = {id:2}
m[x] = "foo"
m[y] = "bar"
console.log(m[x]) // bar
console.log(m[y]) // bar

Map原型方法、屬性

set方法設置

  • set方法設置鍵名key對應的鍵值為value,然后返回整個 Map 結構。如果key已經有值,則鍵值會被更新,否則就新生成該鍵。
const m = new Map()
const x = { id: 1 }
const y = { id: 2 }
m.set(x, 'foo').set(y, 'bar')
console.log(m)
console.log(m.get(x)) // foo
console.log(m.get(y)) // bar

在這里插入圖片描述

  • 作為構造函數,Map 可以接受一個數組作為參數。該數組的成員是一個個表示鍵值對的數組。
  • 鍵名相同時會覆蓋
const map = new Map([['name', '張三'],['title', 'Author']
]);map.size // 2
map.has('name') // true
map.get('name') // "張三"
map.has('title') // true
map.get('title') // "Author"
let items = [['name', 'Lee'], ['title', 'Teacher']]
let map = new Map()
items.forEach(([key, value]) => {map.set(key, value)
})
console.log(map)
let map = new Map()
map.set(-0, 1)
console.log(map.get(+0)) // 1
map.set(NaN, 2)
console.log(map.get(NaN)) // 2

delete方法

  • 刪除某個鍵,返回true。如果刪除失敗,返回false。
const m = new Map();
m.set(undefined, 'nah');
console.log(m.delete(undefined)) // true
console.log(m.delete(1)) // false    

clear

  • clear方法清除所有成員,沒有返回值。

has

  • has方法返回一個布爾值,表示某個鍵是否在當前 Map 對象之中。

遍歷方法

Map 結構原生提供三個遍歷器生成函數和一個遍歷方法。
Map.prototype.keys():返回鍵名的遍歷器
Map.prototype.values():返回鍵值的遍歷器
Map.prototype.entries():返回所有成員的遍歷器
Map.prototype.forEach():遍歷 Map 的所有成員。

const map = new Map([['F', 'no'],['T', 'yes'],
]);for (let item of map.entries()) {console.log(item);
}
// ["F", "no"]
// ["T", "yes"]
// 或者
for (let item of map) {console.log(item);
}
// ["F", "no"]
// ["T", "yes"]
console.log(map[Symbol.iterator] === map.entries) // true// 解構
for (let [key, value] of map.entries()) {console.log(key, value);
}

Map轉為數組

  • …可以將部署了迭代器接口的結構轉換為數組
const map = new Map([['F', 'no'],['T', 'yes'],
]);
console.log([...map]);

Map轉為對象

  • 條件,鍵名為字符串
let map = new Map()
map.set(true, 7).set('foo', ['abc'])
let obj = {}
for (let [key, value] of map) {obj[key] = value
}
console.log(obj)

在這里插入圖片描述

對象轉為map

const obj = {foo: [1, 2],bar: 1
}
let map = new Map()
for (let k in obj) {map.set(k, obj[k])
}
console.log(map)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/250988.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/250988.shtml
英文地址,請注明出處:http://en.pswp.cn/news/250988.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

jquery --- DOM操作、表單元素的初始化

1.獲取ul里第2個li節點: var $li_two $("ul li:eq(1)"); // 獲取該節點的內容 var $li_two_txt $li_two.text();2.獲取p元素節點的title屬性: var $para $("p"); var p_title $para.attr("title");3.創建2個li節點,并添加道ul中: var $li…

Jquery中post與get之間的區別詳細介紹

1:GET訪問瀏覽器認為是等冪的 GET訪問瀏覽器認為是等冪的,就是一個相同的URL只有一個結果,相同是指整個URL字符串完全匹配。所以,第二次訪問的時候,如果URL字符串沒變化 瀏覽器是直接拿出了第一次訪問的結果; POST則認…

LeetCode 424. Longest Repeating Character Replacement

原題鏈接在這里:https://leetcode.com/problems/longest-repeating-character-replacement/description/ 題目: Given a string that consists of only uppercase English letters, you can replace any letter in the string with another letter at mo…

ES6-16 WeakMap與WeakSet、proxy與reflect

WeakMap/WeakSet 原型上不存在遍歷方法(沒有部署iterator接口)成員只能是對象垃圾回收機制不考慮對成員對象的應用 WeakSet/WeakMap 中的對象都是弱引用,即垃圾回收機制不考慮 WeakSet 對該對象的引用,也就是說,如果其他對象都不再引用該對象…

jquery--- 屬性和樣式的操作 設置和獲取HTML、文本和值、焦點事件

1.獲取p元素的title屬性: var title $("p").attr("title");2.給p元素加title屬性(值為:栗子)和date屬性(值為:2019/7/15): $("p").attr("title":"栗子", "date":"2019/7/15");3.刪除p中的title屬性:…

day9

前方高能---初識函數 一. 什么是函數 函數:對代碼塊和功能的封裝和定義. 二. 函數的定義,函數名,函數體,以及函數的調用 def 函數名(): 函數體 函數體:就是函數被執行之后要執行的代碼. 三, 函數的返回 執行完函數之后,我們可以使用return來返回結果. 函數中return的使用: 1.函…

MySQL 數據庫索引

數據庫索引在數據庫中、索引使數據庫程序無須對整個表進行全表掃描就可以在其中找到所需的數據;數據庫中的索引是某個表中一列或者若干列值的集合、以及物理標識這些值的數據頁的邏輯指針清單;MySQL 索引的增刪查SQL 語句效率的分析索引的作用&#xff1…

ES6-17 class與對象

class 模擬類的方式語法糖(把以前的寫法換了一個方式) 類內部的方法是不可枚舉的 ES5用Object.assign拓展的原型屬性是可枚舉的 function Point(x, y) {this.x x;this.y y; } // 這樣定義的原型上方法eat\drink是可枚舉的 Point.prototype Object…

8.8 正睿暑期集訓營 Day5

目錄 2018.8.8 正睿暑期集訓營 Day5總結A 友誼巨輪(線段樹 動態開點)B 璀璨光滑C 構解巨樹考試代碼ABC2018.8.8 正睿暑期集訓營 Day5時間:3.5h(實際)期望得分:602020實際得分:202020 比賽鏈接這里也有一些 總結 線段樹!&#xff0…

算法 --- 二叉樹的最大深度

思路: 1.二叉樹的深度,等于Max(左子樹最大深度,右子樹最大深度) 1 2.節點不存在時,此時的深度為0 3.當節點存在,左右子樹不存在時(此時為葉子節點) 返回1 /*** Definition for a binary tree node.* function TreeNode(val) {* this.val val;* this.left this.righ…

ES6-18/19 異步的開端-promise

ES6-18異步的開端-promise ES6-19 promise的使用方法和自定義promisify try catch只能捕獲同步異常,不能捕獲異步的 等待所有異步都執行完,打印結果,比較笨拙的方法,在每個異步操作加arr.length 3 && show(arr) Promis…

leetcode35 C++ 4ms 搜索插入位置

class Solution { public:int searchInsert(vector<int>& nums, int target) {for(int i 0;i<nums.size();i){if(nums[i] > target){return i;}}return nums.size()-1;} }; 轉載于:https://www.cnblogs.com/theodoric008/p/9449049.html

OpenCV-Python 中文教程(搬運)目錄

OpenCV-Python 中文教程 OpenCV官方教程中文版&#xff08;For Python&#xff09; OpenCV2-Python-Tutorials 段力輝 譯 說明&#xff1a;搬運自linux公社pdf文件&#xff0c;粗略搬運&#xff0c;僅作個人筆記參考&#xff0c;有時間再美化 部分文件參考&#xff1a; https:/…

算法 --- 平衡二叉樹

解題思路: 1.首先寫一個返回深度的函數d 2.寫一個遍歷函數t 3.在t中首先判斷,r是否為空(為空則此時就是平衡二叉樹,返回true),然后判斷是否為葉子節點(r.left null && r.right null)若是則返回true,最后判斷,其左子樹的深度與右子樹的深度之差是否大于1.若是則返回fal…

【co】ES6-20/21 iterator與generator

ES6-20 iterator與generator ES6-21 async與await、ES6的模塊化 try catch不能捕獲異步異常 try catch是同步代碼 try {setTimeout(() > {console.log(a)}) } catch (e) {console.log(e) }iterator 內部迭代器&#xff1a;系統定義好的迭代器接口&#xff08;如數組Symbol…

嵌入式系統UBOOT

一個完整的嵌入式linux系統包含4部分內容&#xff1a;Bootloader、Parameters、Kernel、Root File System。3、4、5、6部分詳細介紹了這4部分的內容&#xff0c;這是Linux底層軟件開發人員應該掌握的。通過學習這些章節&#xff0c;您可以詳細了解到如何在一個裸板上裁減、移植…

驅動芯片

一 LED驅動芯片&#xff1a; 1.1 TM1640:16位數碼管驅動芯片&#xff0c;2線制控制&#xff08;CLK/DIN&#xff09;,SCLK低電平時DIN輸入&#xff0c;而SCLK高電平時保持DIN保持不變&#xff1b;開始傳輸&#xff1a;SCLKH時DIN由高變低&#xff0c;停止傳輸SCLKH時DIN由由低變…

jquery --- 控制元素的隱藏/顯示

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> </head> <body> <div id"panel"><h5 class"head">什么是jquery?</h5><div class"content" style"display:non…

confusion_matrix(混淆矩陣)

作者&#xff1a;十歲的小男孩 凡心所向&#xff0c;素履可往 目錄 監督學習—混淆矩陣 是什么&#xff1f;有什么用&#xff1f;怎么用&#xff1f; 非監督學習—匹配矩陣 混淆矩陣 矩陣每一列代表預測值&#xff0c;每一行代表的是實際的類別。這個名字來源于它可以非常容…

Python 21 Django 實用小案例1

實用案例 驗證碼與驗證 KindEditor 組合搜索的實現 單例模式 beautifulsoup4 驗證碼與驗證 需要安裝Pillow模塊 pip stall pillow1、首先需要借助pillow模塊用來畫一個驗證碼圖形&#xff0c;這里單獨封裝了一個py文件&#xff0c;調用一個方法就好了 1 #!/user/bin/env python…