js版数据结构_06 字典

js版数据结构_06 字典

本篇博客知识点:

  • 什么是字典
  • 相关方法的实现

1. 什么是字典

上一篇博客我们总结了集合,知道集合就是存放了一组互不重复的元素。字典和它相差不多,只不过集合里面只是保存了值,而在这里是以键值对的方式保存的

与集合的实现相同,这里我们还是使用对象作为字典结构的数据容器。

创建字典类:

class Dictionary {
            constructor() {
                    this.table = {};
                }
                }

要实现的相关方法:

  • set(key,value):向字典中添加新元素。如果 key 已经存在,那么已存在的 value 会
    被新的值覆盖
  • remove(key):通过使用键作为参数来从字典中移除键值对应的数据值。
  • hasKey(key):如果某个键值存在于该字典中,返回 true,否则返回 false。
  • get(key):通过以键值作为参数查找特定的数值并返回。
  • clear():删除该字典中的所有值。
  • isEmpty():在 size 等于零的时候返回 true,否则返回 false。
  • keys():将字典所包含的所有键名以数组形式返回。
  • values():将字典所包含的所有数值以数组形式返回。
  • keyValues():将字典中所有[键,值]对返回。
  • forEach(callbackFn):迭代字典中所有的键值对。 callbackFn 有两个参数: key 和
    value。

2.相关方法的实现

ps:下面为了保证输入的键为字符串,为方便使用了空字符串的拼接

hasKey(key)

                // 判该字典中是否有该键
            hasKey(key) {
                    return this.table[key + ""] != null;
                }

set(key, val)

                 // 加入或重置键值对
            set(key, val) {
                    if (key != null && val != null) {
                        this.table[key + ""] = val;
                        return true;
                    } else {
                        return false;
                    }
                } 

remove(key)

                 // 删除键值对
            remove(key) {
                    if (this.hasKey(key + "")) {
                        delete this.table[key + ""];
                        return true;
                    } else {
                        return false;
                    }
                } 

get(key)

            get(key) {
                    if (this.hasKey(key + "")) {
                        return this.table[key + ""];
                    } else {
                        return undefined;
                    }
                }

keyValues()

 // 返回字典中的所有value
            keyValues() {
                    return Object.values(this.table);
                }

keys()

   // 返回字典中的所有key
      keys() {
                return Object.keys(this.table);
            }

size()

            size() {
                return Object.keys(this.table).length;
            }

isEmpty()

            isEmpty() {
                return this.size() === 0;
            }

clear()

            clear() {
                this.table = {};
            }

forEach(callback)

            forEach(callback) {
                const key = this.keys();
                for (let i = 0; i < key.length; i++) {
                    let res = callback(key[i], this.table[key[i]]);
                    if (res === false) {
                        break;
                    }
                }
            }

部分测试代码:

        let dic = new Dictionary();
        dic.set(1, "a");
        dic.set(2, "b");
        dic.set(3, "c");
        dic.set(4, "d");
        dic.set(5, "e");
        console.log(dic.hasKey(1));
        dic.remove(2);
        console.log(dic.get(3));
        console.log(dic.keyValues());
        console.log(dic.keys());
        dic.forEach((key, val) => {
            console.log(`key:${key} val:${val}`);

        })

结果图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_41086511/article/details/105564438
今日推荐