es6??????5^_^set???map???iterator

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了es6??????5^_^set???map???iterator相关的知识,希望对你有一定的参考价值。

??????????????????   ??????   ??????   each   for   new   ?????????   ??????   key   

??????set

1.????????????

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

    var items = new Set([1,2,3,4,5,5,5,5]);
    console.log(items); // set object
    console.log(items.size); // 5
//???Set??????????????????????????????????????????????????????5???“5”????????????????????????
    let set = new Set();
    set.add({})
    console.log(set.size);// 1
    set.add({})
    console.log(set.size);// 2
//????????????????????????????????????????????????????????????????????????????????????????????????

2.Set???????????????

Set?????????????????????????????????
Set.prototype.constructor??????????????????????????????Set?????????
Set.prototype.size?????????Set????????????????????????
    let s = new Set();
    s.add(1).add(2).add(2);// ??????2??????????????????
    console.log(s);
    console.log(s.size); // 2

3.Set???????????????

??????????????????
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????

??????add(value)???????????????????????????Set???????????????
??????delete(value)????????????????????????????????????????????????????????????????????????
??????has(value)????????????????????????????????????????????????Set????????????
??????clear()??????????????????????????????????????????
??????????????????????????????????????????:
    let s = new Set();
    s.add(1).add(2).add(2);
        console.log(s.has(1));// true
        console.log(s.has(2)); // true
        console.log(s.has(3));// false
    s.delete(2);
        console.log(s.has(2));// false
    s.clear();
        console.log(s.size);//0
//Array.from???????????????Set?????????????????????
    let items = new Set([1, 2, 3, 4, 5]);
    let array = Array.from(items);
    console.log(array);//[1, 2, 3, 4, 5]

4.????????????

Set??????????????????????????????????????????????????????????????????
??????keys()?????????????????????????????????
??????values()?????????????????????????????????
??????entries()????????????????????????????????????
??????forEach()???????????????????????????????????????
??????Set???????????????????????????????????????????????????????????????????????????????????????key?????????value??????????????????????????????
    let set = new Set([???red???, ???green???, ???blue???]);
    for ( let item of set.keys() ){
        console.log(item);// red green blue
    }
    for ( let item of set.values() ){
        console.log(item);// red green blue
    }
    for ( let item of set.entries() ){
        console.log(item);// ["red", "red"]  ["green", "green"] ["blue", "blue"]
    }
    set.forEach(function(item){
        console.log(item);// red green blue
    })

??????WeakSet

WeakSet???Set????????????????????????????????????????????????????????? ???
WeakSet????????????????????????????????????????????????????????????
WeakSet??????????????????????????????
WeakSet.prototype.add(value)??????WeakSet??????????????????????????????
WeakSet.prototype.delete(value)?????????WeakSet????????????????????????
WeakSet.prototype.has(value)???????????????????????????????????????????????????
    let ws = new WeakSet();
//console.log(ws.add(1));// TypeError: Invalid value used in weak set
    let obj = {};
    let foo = {};
    ws.add(window);
    ws.add(obj);
    console.log(ws);
    console.log(ws.has(window)); // true
    console.log(ws.has(foo));    // false
    ws.delete(window);
    console.log(ws.has(window));    // false
//WeakSet??????size??????????????????????????????????????????
    console.log(ws.size) // undefined
    console.log(ws.forEach); // undefined
//ws.forEach(function(item){ console.log(???WeakSet has ??? + item)})// TypeError: undefined is not a function

??????Map??????????????????????????????

Map ?????????“?????????”?????? key ??????????????? String ?????????????????????????????????????????????????????????
??????????????? Set ????????????
??????size????????????????????????
??????set(key, value)???????????????????????????
??????get(key)?????????????????????
??????has(key)???????????????????????????????????????????????????Map??????????????????
??????delete(key)?????????????????????
??????clear()????????????????????????
        let m = new Map();
        o = {p: "Hello World"};
        m.set(o, "content")
        console.log(m);
        console.log(m.get(o))// "content"

??????????????????????????????

Map????????????????????????????????????????????????
??????size????????????????????????
??????set(key, value)?????????key???????????????????????????????????????Map???????????????key??????????????????????????????????????????????????????????????????
??????get(key)?????????key?????????????????????????????????key?????????undefined???
??????has(key)???????????????????????????????????????????????????Map??????????????????
??????delete(key)???????????????????????????true??????????????????????????????false???
??????clear()??????????????????????????????????????????
??????set()??????????????????Map??????????????????????????????????????????
    let map = new Map()
            .set(1, ???a???)
            .set(2, ???b???)
            .set(3, ???c???);
    console.log(map);
//?????????has()???delete()????????????
    let m = new Map();
    m.set("edition", 6)        // ???????????????
    m.set(262, "standard")     // ????????????
    m.set(undefined, "nah")    // ??????undefined
    let hello = function() {console.log("hello");}
    m.set(hello, "Hello ES6!") // ????????????
    m.has("edition")     // true
    m.has("years")       // false
    m.has(262)           // true
    m.has(undefined)     // true
    console.log(m.get(undefined));
    m.has(hello)         // true
    m.delete(undefined)
    m.has(undefined)       // false
    m.get(hello)  // Hello ES6!
    m.get("edition")  // 6
//?????????size?????????clear??????????????????
    map.set(???foo???, true);
    map.set(???bar???, false);
    map.size // 2
    map.clear()
    map.size // 0
    console.log(Array.from(m));//Array

????????????

??????Map??????????????????????????????
??????keys()??????????????????????????????
??????values()??????????????????????????????
??????entries()????????????????????????????????????
???????????????
    let map = new Map([
        [???F???, ???no???],
        [???T???,  ???yes???],
    ]);

    for (let key of map.keys()) {
        console.log(key);
    }
// "F"
// "T"

    for (let value of map.values()) {
        console.log(value);
    }
// "no"
// "yes"

    for (let item of map.entries()) {
        console.log(item[0], item[1]);
    }
// "F" "no"
// "T" "yes"

// ??????
    for (let [key, value] of map.entries()) {
        console.log(key, value);
    }

// ???????????????map.entries()
    for (let [key, value] of map) {
        console.log(key, value);
    }

Map?????????????????????????????????????????????????????????????????????????????????...??????

        let map = new Map([
            [1, ???one???],
            [2, ???two???],
            [3, ???three???]
        ]);
        [...map.keys()];
// [1, 2, 3]
        [...map.values()];
// [???one???, ???two???, ???three???]
        [...map.entries()];
// [[1,???one???], [2, ???two???], [3, ???three???]]
        [...map]
// [[1,???one???], [2, ???two???], [3, ???three???]]
//?????????Map????????????forEach?????????????????????forEach???????????????????????????????????????
        map.forEach(function(value, key){
            console.log(key+???:???+value);
        });

??????WeakMap

WeakMap?????????Map????????????????????????????????????????????????????????????????????????null?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????set()???get()???????????????????????????????????????:
    let map = new WeakMap();
    let element={};
    map.set(element, "Original");
// ????????????????????????
    let value = map.get(element);
    console.log(value);             // "Original"

WeakMap???Map???API???????????????????????????:

??????????????????????????????????????????key()???values()???entries()?????????????????????size?????????
???????????????????????????????????????clear???????????????WeakMap???????????????????????????????????????????????????????????????
?????????WeakMap???????????????????????????get()???set()???has()???delete()???

??????Iterator????????????????????????

????????????Iterator????????????????????????????????????????????????????????????????????????

Iterator?????????????????????

????????????????????????????????????????????????????????????????????????????????????
?????????????????????????????????????????????????????????????????????
????????????ES6?????????????????????????????????for...of?????????Iterator???????????????for...of?????????

Iterator??????????????????????????????

?????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
????????????????????????????????????next???????????????????????????????????????????????????????????????
????????????????????????????????????next?????????????????????????????????????????????????????????
???????????????????????????next??????????????????????????????????????????????????????
?????????????????????next????????????????????????????????????????????????????????????????????????????????????value???done?????????????????????????????????value??????????????????????????????done??????????????????????????????????????????????????????
    function idMaker(){
        var index = 0;
        return {
            next: function(){
                return {value: index++, done: false};
            }
        }
    }
    let it = idMaker();
    console.log(it.next().value); // ???0???
    console.log(it.next().value); // ???1???
    console.log(it.next().value); // ???2???

?????????????????????Iterator??????

???ES6???????????????????????????(????????????)???????????????????????????Symbol.iterator????????????????????????????????????????????????????????????????????????Symbol.iterator?????????Symbol???Symbol???ES6??????????????????????????????
    let arr = [???a???, ???b???, ???c???];
    let iter = arr[Symbol.iterator]();
    console.log(iter);
    console.log(iter.next()); // { value: ???a???, done: false }
    console.log(iter.next()); // { value: ???b???, done: false }
    console.log(iter.next()); // { value: ???c???, done: false }
    console.log(iter.next()); // { value: undefined, done: true }
????????????????????????arr????????????????????????????????????????????????????????????arr???Symbol.iterator??????????????????????????????????????????????????????????????????
????????????Iterator???????????????
??????????????????????????????iterator????????????Symbol.iterator????????????????????????????????????for...of????????????????????????????????????

????????????

????????????Set?????????????????????????????????????????????iterator?????????
    let set = new Set().add(???a???).add(???b???).add(???c???);
    let [x,y] = set;
// x=???a???; y=???b???
    let [first, ...rest] = set;
    console.log(first);//???a???
    console.log(rest);// [???b???,???c???];
//???????????????
//??????????????????...????????????????????????iterator?????????
// ??????
    let str = ???hello???;
    console.log([...str]); //  [???h???,???e???,???l???,???l???,???o???]
// ??????
    let arr = [???b???, ???c???];
    console.log([???a???, ...arr, ???d???]);// [???a???, ???b???, ???c???, ???d???]

????????????

?????????????????????????????????iterator????????????????????????????????????
yield*
Array.from()
Map(), Set(), WeakMap(), WeakSet()
Promise.all(), Promise.race()

????????????Iterator?????????????????????
?????????????????????????????????????????????????????????Iterator?????????
    let someString = "hi";
    typeof someString[Symbol.iterator]// "function"
    let iterator = someString[Symbol.iterator]();
    iterator.next()  // { value: "h", done: false }
    iterator.next()  // { value: "i", done: false }
    iterator.next()  // { value: undefined, done: true }
//????????????????????????Symbol.iterator???????????????????????????????????????????????????????????????next??????????????????????????????????????????
//?????????????????????Symbol.iterator????????????????????????????????????????????????
    let str = new String("hi");
    [...str] // ["h", "i"]
    str[Symbol.iterator] = function() {
        return {
            next: function() {
                if (this._first) {
                    this._first = false;
                    return { value: "bye", done: false };
                } else {
                    return { done: true };
                }
            },
            _first: true
        };
    };
    [...str] // ["bye"]
    str // "hi"
//???????????????????????????str???Symbol.iterator?????????????????????????????????????????????...????????????????????????bye???????????????????????????hi???

??????Iterator?????????Generator??????


Symbol.iterator????????????????????????????????????????????????????????????Generator?????????
    let myIterable = {};
    myIterable[Symbol.iterator] = function* () {
        yield 1;
        yield 2;
        yield 3;
    };
    console.log(myIterable);
    console.log([...myIterable]); // [1, 2, 3]

// ?????????????????????????????????
    let obj = {
    * [Symbol.iterator]() {
        yield ???hello???;
        yield ???world???;
    }
    };

    for (let x of obj) {
        console.log(x);// hello  world
    }
//??????????????????Symbol.iterator????????????????????????????????????????????????yield??????????????????????????????????????????

????????????return()???throw()

??????????????????????????????????????????next????????????????????????return?????????throw??????????????????next???????????????????????????return?????????throw?????????????????????????????????
return?????????????????????????????????for...of??????????????????????????????????????????????????????break?????????continue????????????????????????return?????????
????????????????????????????????????????????????????????????????????????????????????return?????????
throw?????????????????????Generator?????????????????????????????????????????????????????????

??????for...of??????

?????????????????????????????? CLI IEnumerable ?????? Java Iterable ???????????????????????????
?????????for..in?????????????????????????????????????????????for..of??????????????????????????????????????????????????? LINQ ??????????????????????????????
    let fibonacci = {
        [Symbol.iterator]() {
            let pre = 0, cur = 1;
            return {
                next() {
                    [pre, cur] = [cur, pre + cur];
                    return { done: false, value: cur }
                }
            }
        }
    }
    console.log(fibonacci);
    for (let n of fibonacci) {
        // truncate the sequence at 1000
        if (n > 1000){
            break;
        }
        console.log(n);
    }

 ??????????????????……










以上是关于es6??????5^_^set???map???iterator的主要内容,如果未能解决你的问题,请参考以下文章

ES6 Set 和 Map

ES6中Map()和Set()的用法详解

es6入门set和map

es6 语法 (set 和 map)

ES6入门之set和map

es6中的Set和Map