ES6 Set和Map的那点事

Set 

1.Set特点

类数组 新增数据结构 是构造函数 成员值唯一  注重独一无二的特征 

2.Set实例的常用方法

    console.log('------------Set操作方法------------');
    let set1 = new Set([1, 2, 3, 3]).add(42).add(68).add({ a: 2 }).add({ a: 2 }).add(NaN).add(NaN);
    console.log( "set1",set1)//Set(8) {1, 2, 3, 42, 68, …} "set1"
    set1.delete(1);
    console.log("set1",set1) //Set(7) {2, 3, 42, 68, {…}, …} "set1"
    console.log(set1.has(2)); //true
    set1.clear()
    console.log(set1) //Set(0) {}
    //总结:1.Set类数组 数据单一化 NaN认为相同  add里面复杂数据类型 则认为不同

console.log('--------Set遍历方法-------------') let set1M = new Set([1, 2, 2, 2,]); console.log(set1M.values()) //SetIterator {1, 2} console.log(set1M.keys()); //SetIterator {1, 2} console.log(set1M.entries()) //SetIterator {1 => 1, 2 => 2} set1M.forEach(value => console.log(value)) // 1 2 //总结:Set的values和keys方法 返回的值一样 返回一个遍历器接口 可以调用for of //调用forEach 无返回值

3.Set的几个经典面试题

1.实现数组去重 和Set的交集,并集,差集

    console.log('-------Set的应用1---------------');
    //数组去重
    console.log([...new Set([1, 2, 2,])]) // [1, 2]
    console.log(Array.from(new Set([1, 2, 2])))// [1, 2]

    let set11Arr = new Set([1, 2, 3])
    let set12Arr = new Set([2, 3, 4])
    //交集 
    let jiao = new Set([...set11Arr].filter(x => set12Arr.has(x)));
    console.log("jiao", jiao) //Set(2) {2, 3}
    //并集 
    console.log(new Set([...set11Arr, ...set12Arr])) //Set(4) {1, 2, 3, 4}
    //差集
    let cha = new Set([...set11Arr].filter(x => !set12Arr.has(x)));
    console.log("cha", cha) // Set(1) {1} 

2.给定一个整数无序数组和变量 sum,如果存在数组中任意两项和使等于 sum 的值,则返回true。否则, 返回false。例如,数组[3, 5, 1, 4]和 sum = 9,函数应该返回true,因为4 + 5 = 9。

  //常规版本
    const findSum = (arr, val) => {
        let searchValues = new Set();
        searchValues.add(val - arr[0]);
        for (let i = 1, length = arr.length; i < length; i++) {
            let searchVal = val - arr[i];
            if (searchValues.has(arr[i])) {
                return true;
            } else {
                searchValues.add(searchVal);
            }
        };
        return false;
    };


    //简洁的版本:
    const findSum = (arr, sum) =>
        arr.some((set => n => set.has(n) || !set.add(sum - n))(new Set));

    let findS = findSum([3, 5, 1, 4], 9)
    console.log(findS) //true

Map

1.Map的特点 

类对象 相当于对对象的扩展 原来对象键值只能位字符串 Map结构的键进行了扩展

2.Map实例的常用方法

    console.log("------------Map操作方法------------------")
    let map1 = new Map([["a", 1], ["b", 2]]).set("c", 3).set("a", 5) //set方法有值更新 没值替换
    console.log("map1", map1) //Map(3) {"a" => 5, "b" => 2, "c" => 3}
    console.log(map1.get("a")) //5
    console.log(map1.has("a")) //true
    map1.delete("a")
    console.log("map1", map1) //Map(2) {"b" => 2, "c" => 3}
    map1.clear()
    console.log("map1", map1) //Map(0) {}
    console.log("------------Map遍历方法------------------")
    let MapM = new Map([["a", 1], ["b", 2]])
    console.log(MapM.values()) //MapIterator {1, 2}
    console.log(MapM.keys())   //MapIterator {"a", "b"}
    console.log(MapM.entries()) //MapIterator {"a" => 1, "b" => 2}
    MapM.forEach(x => console.log(x)) //1 2
    //总结:Map的values和keys,entries方法 返回一个遍历起接口可以调用for of
    //调用forEach 无返回值 

3.Map的几个经典面试题 

1.如何把Map转为数组

console.log([...new Map([["a", 1], ['b', 2]])]) //[["a", 1], ['b', 2]]

猜你喜欢

转载自www.cnblogs.com/sunxiaopei/p/11951960.html
今日推荐