ES6的Set和Map

  1. Set本身是一個構造函數 let set = new Set();
  2. Set函數可以接受一個數組作爲參數,用來初始化;
  3. 數組去重:
    a. let newArr = [...new Set([1,2,2,3,3])];
    b. let newArr = Array.from(new Set([1,2,2,3,3]));
  4. Set操作方法
    a. add(value);return Set;
    b. delete(value);return boolean;
    c. has(value);return boolean;
    d. clear(); 沒有返回值
  5. 數組的mapfilter方法也可以用於Set,在傳遞進去的方法是沒有返回值的。
  6. ES6的Map數據結構,它類似於對象,也是鍵值對的集合,但是”鍵”的範圍不限於字符串,各種類型的值都可以作爲鍵 。
  7. map的操作方法:
    a. set(key,value)//return Set,因此可以採用鏈式寫法
    b. get(key)//如果找不到key,就返回undefined
    c. has(key)//return boolean
    d. delete(key)//return boolean
    e. clear()//沒有返回值
  8. Set和Map的遍歷:三個“遍歷器對象”生成函數,一個“遍歷方法”
    a. keys()//返回鍵名的遍歷器
    b. values()//返回鍵值的遍歷器
    c. entries()//返回鍵值對的遍歷器,每一個元素都是[key,value]
    d. forEach(funtion,context)//context表示function中this的指向
  9. Map和JSON之間的轉換;strMapToObj(map)//將Map對象轉Object
    a. 如果mapkey 是字符串: JSON.stringify(strMapToObj(map))
    b. 如果mapkey 不是字符串,那麼可以轉成數組的JSONJSON.stringify([...map])
    c. JSONMap 還是先轉成“對象”或“數組”,再轉成Map

Symbol.iterator 屬性的實現

let obj = {
    index:0,
    [Symbol.iterator](){
        let index = this.index//函數中最裏面能訪問外面,但對象不行
        return {
            next:function(){
                if(index>3) return {value:undefined,done:true};
                else return {value:index++,done:false};
            }
        }
    }
}
for(let i of obj){
    console.log(i);
}

運行結果:
這裏寫圖片描述

利用generator函數實現Symbol.iterator屬性

let obj = {
    *[Symbol.iterator](){
        yield "aa";
        yield* [1,2];
        yield "bb";
    }
}
for(let i of obj){
    console.log(i);
    }

運行結果:
運行結果


總結:
1. Array,String 其實也就是特殊的Object
2. 只要當前對象的Symbol.iterator 實現了,就可以用for of 遍歷;默認實現了該屬性的“對象”有Array,Map,Set,String,函數的arguments對象
3. 只要實現了Symbol.iterator 的,都可以採用數組解構的解構賦值+擴展運算符(...),let [x,...res] = "hello"//x=h,res = [e,l,l,o];
4. function 參數也可以採用擴展運算符: function fun(x,y){};let arr=[1,2];fun(...arr);
5. Array.from()//將Map或者Set類型轉爲數組
6. Array.of(1,2)//[1,2]//將一組數據轉成數組返回

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章