如何用Object实现Map数据结构

如题。map数据结构和object有一个区别是Map可以将任意类型值作为key,例如对象,函数。
请问用ES5的对象该如何实现?

波斯汪
浏览 736回答 2
2回答

明月笑刀无情

function reDefineValueOf(key) {  const private = {};  const baseValueOf = key.valueOf;  function valueOf(n) {    if (arguments.length > 0) {      if (!(n in private)) {        private[n] = {};      }      return private[n];    }    return baseValueOf.apply(this, arguments)  }  Object.defineProperty(key, 'valueOf', {    value: valueOf,    configurable: true,    writable: true,    enumerable: false  })}function map() {  //通过count来解决,不同map对象,用相同对象作key的情况  const count = map.count++;  function getKey(key) {    if (key.valueOf.length !== 0) {      return key.valueOf(count)    }    reDefineValueOf(key)    return key.valueOf(count);  }  this.get = function (key) {    return getKey(key).value;  }  this.set = function (key, value) {    getKey(key).value = value;  }}map.count = 0;var c = { c: 1 }var a = new map();var b = new map();a.set(c, 'a')b.set(c, 'b')console.log(a.get(c));console.log(b.get(c));核心思想是,既然key是对象,那么就给key对象新增一个函数,这个函数返回的值就是我们当时设置的值。然而由于可能出现不同的map对象,用相同的对象作key值的情况,这里给每一个map对象加了一个count计数器,用来作为map对象的id,以此作为key对象查找的一个依据。

汪汪一只猫

proxy getter
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

数据结构