Loading...
墨滴

是老胡没错

2021/03/20  阅读:18  主题:蓝莹

js 实现map

Js 手写实现一个Map

前言:
因为最近在复习ES6的相关特性,为巩固加深理解,所以用Object对象实现了JS中的算法与数据结构之Map。分享给大家供大家参考

简述

  • Javascript的对象,本质上是键值对的集合,但是传统上只能用字符串当作键。
  • ES6提供了Map数据结构,它类似于对象,也是键值对的集合,但是"键"的范围不限于字符串,各种类型的值(包括对象)都可以当作键。

初始类的创建

  1. 创建一个容器,存放数据
  2. 创建一个
class Mymap {
    constructor(){
        // 创建map容器
        this.arr = new Array();
    }
    // 获取键值对的长度
    get size(){
        return this.arr.length;
    }

    // size为只读属性,限制赋值
    set size(value){
        return undefined;
    }
}

添加

set (key = undefined, value = undefined){
    // 添加的每一项
    let obj = {};
    // 查找是否有相同key如果有改变值,如果没有添加该项长度加1
    for(let i = 0; i < this.arr.length; i++){
        if (key === this.arr[i].key) {
            this.arr[i].value = value;
            return;
        }
    }
    obj.key= key;
    obj.value = value;
    this.arr.push(obj)
}

获取当前项的值

get(key){
    // 如果有则返回该项的值,没有则返回undefined
    for(let i = 0; i < this.arr.length; i++){
        if(key === this.arr[i].key){
            return this.arr[i].value;
        }else if(i === this.arr.length - 1){
            return undefined;
        }
    }
}

查找有无该项

has(key){
    // 如果有返回true没有则返回false
    for(let i = 0; i < this.arr.length; i++){
        if(key === this.arr[i].key){
            return true;
        } else if (i === this.arr.length - 1){
            return false;
        }
    }
}

清空map容器

clear(){
    // 重置初始化
    this.arr = [];
}

删除某一项

delete(key){
    // 如果删除成功则返回true否则返回false
    for(let i = 0; i < this.arr.length; i++){
        if (key === this.arr[i].key) {
            this.arr.splice(i, i + 1);
            return true;
        } else if (i === this.arr.length - 1){
            return false
        }
    }
}

是老胡没错

2021/03/20  阅读:18  主题:蓝莹

作者介绍

是老胡没错