国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

【重溫基礎】11.Map和Set對象

meteor199 / 1756人閱讀

摘要:本文是重溫基礎系列文章的第十一篇。返回一個布爾值,表示該值是否為的成員。使用回調函數遍歷每個成員。與數組相同,對每個成員執行操作,且無返回值。

本文是 重溫基礎 系列文章的第十一篇。
今日感受:注意身體,生病花錢又難受。

系列目錄:

【復習資料】ES6/ES7/ES8/ES9資料整理(個人整理)

【重溫基礎】1.語法和數據類型

【重溫基礎】2.流程控制和錯誤處理

【重溫基礎】3.循環和迭代

【重溫基礎】4.函數

【重溫基礎】5.表達式和運算符

【重溫基礎】6.數字

【重溫基礎】7.時間對象

【重溫基礎】8.字符串

【重溫基礎】9.正則表達式

【重溫基礎】10.數組

本章節復習的是JS中的Map和Set對象,是個集合。

前置知識:
Map和Set對象是在ES6中被引入的,作為一種由key值標記的數據容器。
Map和Set對象承載的數據元素可以按照插入時的順序,被迭代遍歷。

1 Set對象

介紹:
Set數據結構類似數組,但所有成員的值唯一
Set本身為一個構造函數,用來生成Set數據結構,使用add方法來添加新成員。

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

基礎使用

let a = new Set([1,2,3,3,4]);
[...a]; // [1,2,3,4]
a.size; // 4

// 數組去重
[...new Set([1,2,3,4,4,4])];// [1,2,3,4]

注意

Set中添加值的時候,不會類型轉換,即5"5"是不同的。

[...new Set([5,"5"])]; // [5, "5"]

屬性和方法

屬性:

Set.prototype.constructor:構造函數,默認就是Set函數。

Set.prototype.size:返回Set實例的成員總數。

操作方法:

add(value):添加某個值,返回 Set 結構本身。

delete(value):刪除某個值,返回一個布爾值,表示刪除是否成功。

has(value):返回一個布爾值,表示該值是否為Set的成員。

clear():清除所有成員,沒有返回值。

let a = new Set();
a.add(1).add(2); // a => Set(2)?{1, 2}
a.has(2);        // true
a.has(3);        // false
a.delete(2);     // true  a => Set(1)?{1}
a.clear();       // a => Set(0)?{}

數組去重

let a = new Set([1,2,3,3,3,3]);
2 Set的應用

數組去重

// 方法1
[...new Set([1,2,3,4,4,4])]; // [1,2,3,4]
// 方法2
Array.from(new Set([1,2,3,4,4,4]));    // [1,2,3,4]

遍歷和過濾

let a = new Set([1,2,3,4]);

// map 遍歷操作
let b = new Set([...a].map(x =>x*2));// b => Set(4)?{2,4,6,8}

// filter 過濾操作
let c = new Set([...a].filter(x =>(x%2) == 0)); // b => Set(2) {2,4}

獲取并集、交集和差集

let a = new Set([1,2,3]);
let b = new Set([4,3,2]);

// 并集
let c1 = new Set([...a, ...b]);  // Set {1,2,3,4}

// 交集
let c2 = new Set([...a].filter(x => b.has(x))); // set {2,3}

// 差集
let c3 = new Set([...a].filter(x => !b.has(x))); // set {1}

遍歷方法:

keys():返回鍵名的遍歷器。

values():返回鍵值的遍歷器。

entries():返回鍵值對的遍歷器。

forEach():使用回調函數遍歷每個成員

Set遍歷順序是插入順序,當保存多個回調函數,只需按照順序調用。但由于Set結構沒有鍵名只有鍵值,所以keys()values()是返回結果相同。

let a = new Set(["a","b","c"]);
for(let i of a.keys()){console.log(i)};   // "a" "b" "c"
for(let i of a.values()){console.log(i)}; // "a" "b" "c"
for(let i of a.entries()){console.log(i)}; 
// ["a","a"] ["b","b"] ["c","c"]

并且 還可以使用for...of直接遍歷Set

let a = new Set(["a","b","c"]);
for(let k of a){console.log(k)};   // "a" "b" "c"

forEach與數組相同,對每個成員執行操作,且無返回值。

let a = new Set(["a","b","c"]);
a.forEach((v,k) => console.log(k + " : " + v));
3 Map對象

由于傳統的JavaScript對象只能用字符串當做鍵,給開發帶來很大限制,ES6增加Map數據結構,使得各種類型的值(包括對象)都可以作為鍵。
Map結構提供了“值—值”的對應,是一種更完善的 Hash 結構實現。
基礎使用

let a = new Map();
let b = {name: "leo" };
a.set(b,"my name"); // 添加值
a.get(b);           // 獲取值
a.size;      // 獲取總數
a.has(b);    // 查詢是否存在
a.delete(b); // 刪除一個值
a.clear();   // 清空所有成員 無返回

注意

傳入數組作為參數,指定鍵值對的數組

let a = new Map([
    ["name","leo"],
    ["age",18]
])

如果對同一個鍵多次賦值,后面的值將覆蓋前面的值

let a = new Map();
a.set(1,"aaa").set(1,"bbb");
a.get(1); // "bbb"

如果讀取一個未知的鍵,則返回undefined

new Map().get("abcdef"); // undefined

同樣的值的兩個實例,在 Map 結構中被視為兩個鍵。

let a = new Map();
let a1 = ["aaa"];
let a2 = ["aaa"];
a.set(a1,111).set(a2,222);
a.get(a1); // 111
a.get(a2); // 222

遍歷方法
Map 的遍歷順序就是插入順序。

keys():返回鍵名的遍歷器。

values():返回鍵值的遍歷器。

entries():返回所有成員的遍歷器。

forEach():遍歷 Map 的所有成員。

let a = new Map([
    ["name","leo"],
    ["age",18]
])

for (let i of a.keys()){...};
for (let i of a.values()){...};
for (let i of a.entries()){...};
a.forEach((v,k,m)=>{
    console.log(`key:${k},value:${v},map:${m}`)
})

將Map結構轉成數組結構

let a = new Map([
    ["name","leo"],
    ["age",18]
])

let a1 = [...a.keys()];   // a1 => ["name", "age"]
let a2 = [...a.values()]; // a2 => ?["leo", 18]
let a3 = [...a.entries()];// a3 => [["name","leo"], ["age",18]]
4 Map與其他數據結構互相轉換

Map 轉 數組

let a = new Map().set(true,1).set({f:2},["abc"]);
[...a]; // [[true:1], [ {f:2},["abc"] ]]

數組 轉 Map

let a = [ ["name","leo"], [1, "hi" ]]
let b = new Map(a);

Map 轉 對象

如果所有 Map 的鍵都是字符串,它可以無損地轉為對象。
如果有非字符串的鍵名,那么這個鍵名會被轉成字符串,再作為對象的鍵名。

function fun(s) {
  let obj = Object.create(null);
  for (let [k,v] of s) {
    obj[k] = v;
  }
  return obj;
}

const a = new Map().set("yes", true).set("no", false);
fun(a)
// { yes: true, no: false }

對象 轉 Map

function fun(obj) {
  let a = new Map();
  for (let k of Object.keys(obj)) {
    a.set(k, obj[k]);
  }
  return a;
}

fun({yes: true, no: false})
// Map {"yes" => true, "no" => false}

Map 轉 JSON

(1)Map鍵名都是字符串,轉為對象JSON:

function fun (s) {
    let obj = Object.create(null);
    for (let [k,v] of s) {
        obj[k] = v;
    }
    return JSON.stringify(obj)
}
let a = new Map().set("yes", true).set("no", false);
fun(a);
// "{"yes":true,"no":false}"

(2)Map鍵名有非字符串,轉為數組JSON:

function fun (map) {
  return JSON.stringify([...map]);
}

let a = new Map().set(true, 7).set({foo: 3}, ["abc"]);
fun(a)
// "[[true,7],[{"foo":3},["abc"]]]"

JSON 轉 Map

(1)所有鍵名都是字符串:

function fun (s) {
  let strMap = new Map();
  for (let k of Object.keys(s)) {
    strMap.set(k, s[k]);
  }
  return strMap;
  return JSON.parse(strMap);
}
fun("{"yes": true, "no": false}")
// Map {"yes" => true, "no" => false}

(2)整個 JSON 就是一個數組,且每個數組成員本身,又是一個有兩個成員的數組:

function fun2(s) {
  return new Map(JSON.parse(s));
}
fun2("[[true,7],[{"foo":3},["abc"]]]")
// Map {true => 7, Object {foo: 3} => ["abc"]}
參考資料

1.阮一峰ES6入門

本部分內容到這結束

Author 王平安
E-mail pingan8787@qq.com
博 客 www.pingan8787.com
微 信 pingan8787
每日文章推薦 https://github.com/pingan8787...
JS小冊 js.pingan8787.com

歡迎關注微信公眾號【前端自習課】每天早晨,與您一起學習一篇優秀的前端技術博文 .

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100432.html

相關文章

  • 重溫基礎】12.使用對象

    摘要:本文是重溫基礎系列文章的第十二篇。注意對象的名稱,對大小寫敏感。基礎用法第一個參數是目標對象,后面參數都是源對象。用途遍歷對象屬性。用途將對象轉為真正的結構。使用場景取出參數對象所有可遍歷屬性,拷貝到當前對象中。類似方法合并兩個對象。 本文是 重溫基礎 系列文章的第十二篇。 今日感受:需要總結下2018。 這幾天,重重的感冒發燒,在家休息好幾天,傷···。 系列目錄: 【復習資料...

    garfileo 評論0 收藏0
  • 重溫基礎】13.迭代器生成器

    摘要:迭代器和生成器將迭代的概念直接帶入核心語言,并提供一種機制來自定義循環的行為。本文主要會介紹中新增的迭代器和生成器。屬性本身是函數,是當前數據結構默認的迭代器生成函數。 本文是 重溫基礎 系列文章的第十三篇。今日感受:每次自我年終總結,都會有各種情緒和收獲。 系列目錄: 【復習資料】ES6/ES7/ES8/ES9資料整理(個人整理) 【重溫基礎】1.語法和數據類型 【重溫基礎】2.流...

    ymyang 評論0 收藏0
  • 重溫基礎】14.元編程

    摘要:本文是重溫基礎系列文章的第十四篇。元,是指程序本身。有理解不到位,還請指點,具體詳細的介紹,可以查看維基百科元編程。攔截,返回一個布爾值。 本文是 重溫基礎 系列文章的第十四篇。 這是第一個基礎系列的最后一篇,后面會開始復習一些中級的知識了,歡迎持續關注呀! 接下來會統一整理到我的【Cute-JavaScript】的JavaScript基礎系列中。 今日感受:獨樂樂不如眾樂樂...

    cc17 評論0 收藏0
  • 重溫基礎】15.JS對象介紹

    摘要:構造函數通常首字母大寫,用于區分普通函數。這種關系常被稱為原型鏈,它解釋了為何一個對象會擁有定義在其他對象中的屬性和方法。中所有的對象,都有一個屬性,指向實例對象的構造函數原型由于是個非標準屬性,因此只有和兩個瀏覽器支持,標準方法是。 從這篇文章開始,復習 MDN 中級教程 的內容了,在初級教程中,我和大家分享了一些比較簡單基礎的知識點,并放在我的 【Cute-JavaScript】系...

    booster 評論0 收藏0
  • 重溫基礎】7.時間對象

    摘要:本文是重溫基礎系列文章的第七篇。系列目錄復習資料資料整理個人整理重溫基礎語法和數據類型重溫基礎流程控制和錯誤處理重溫基礎循環和迭代重溫基礎函數重溫基礎表達式和運算符重溫基礎數字本章節復習的是中的時間對象,一些處理的方法。 本文是 重溫基礎 系列文章的第七篇。今日感受:做好自律。 系列目錄: 【復習資料】ES6/ES7/ES8/ES9資料整理(個人整理) 【重溫基礎】1.語法和數據類型...

    YuboonaZhang 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<