• 实现es6中的set和map


    转载自: https://www.cnblogs.com/hui-fly/p/9459152.html

    https://blog.csdn.net/roamingcode/article/details/81975913

    set

    function Set (arr) {
      let item = {};
      this.size = 0;
      if (arr) {
        for (let i of arr) {
          item[i] = i;
        }
        this.size = arr.length;
      }
    
      this.has = function (val) {
        return item.hasOwnProperty(val);
      }
      this.add = function (val) {
        if (!this.has(val)) {
          item[val] = val;
          this.size ++;
        }
      }
      this.delete = function (val) {
        if (this.has(val)) {
          delete item[val];
          this.size --;
        }
      }
      this.clear = function () {
        item = {};
        this.size = 0;
      }
      this.values = function () {
        return Object.values(item);
      }
    }
    
    let set = new Set([1, 2, 3]);
    console.log(set.has(3));  // true
    console.log(set.has(4));  // false
    set.add(0);
    console.log(set.has(0));  // true
    console.log(set.size);    // 4
    set.delete(3);
    console.log(set.has(3));  // false
    console.log(set.size);   // 3
    console.log(set.values());  // [0,1,2]

    map

    class Map {
      constructor (arr = []) {
        this.items = {};
        this.size = 0;
        arr.forEach(arr_item => {
          this.set(arr_item[0], arr_item[1]);
        })
      }
      has (val) {
        return this.items.hasOwnProperty(val);
      }
      set (key, val) {
        if (!this.has(key)) {
          this.size ++;
        }
        this.items[key] = val;
      }
      get (key) {
        return this.has(key)? this.items[key]: undefined;
      }
      delete (key) {
        if (this.items.has(key)) {
          delete this.items[key];
          this.size --;
          return true;
        } else {
          return false;
        }
      }
      clear () {
        this.items = {};
        this.size = 0;
      }
      keys () {
        return Object.keys(this.items);
      }
      values () {
        return Object.values(this.items);
      }
    }
    
    let map = new Map([['name', 'alice'], ['age', 19]]);
    console.log(map.has('age'));  // true
    console.log(map.get('age'));  // 19
    map.set('address', 'bupt');
    map.set('age', 20);
    console.log(map.size); // 3 console.log(map.keys());
    // [ 'name', 'age', 'address' ] console.log(map.values()); // [ 'alice', 20, 'bupt' ]
  • 相关阅读:
    C#冒泡排序--详解
    盘古搜索--实例解析
    ajax提交表单序列化(serialize())数据
    随机数大揭秘
    静态代码块(主要是注意执行顺序)
    单例模式
    递归
    vue路由嵌套(邹文丰)
    vue computed和 methods、 watch 区别(邹文丰)
    vuex状态管理mutations,getters,actions总结(邹文丰)
  • 原文地址:https://www.cnblogs.com/ceceliahappycoding/p/11560068.html
Copyright © 2020-2023  润新知