<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
class Dictionary {
table = {}
toStrFn(item){
if(item === null){
return 'NULL'
} else if(item === undefined){
return 'UNDEFINED'
}else if (item === 'string' || item instanceof String) {
return item
}
return JSON.stringify(item)
}
hasKey(key){
return this.table[this.toStrFn(key)] != null
}
set(key, value){
if(key != null && value != null){
const tablekey = this.toStrFn(key)
this.table[tablekey] = new ValuePair(key, value)
return true
}
return false
}
get(key){
const valuepar = this.table[this.toStrFn(key)]
return valuepar == null ? undefined : valuepar.value
}
remove(key){
if(this.hasKey(key)){
delete this.table[this.toStrFn(key)]
return true
}
return false
}
keys(){
return this.keyValues().map(item => item.key)
}
values(){
return this.keyValues().map(item => item.value)
}
keyValues(){
return Object.values(this.table)
}
size(){
return Object.keys(this.table).length
}
isEmpty(){
return this.size() === 0
}
clear(){
this.table = {}
}
forEach(cb){
const valuepair = this.keyValues()
for(let i = 0; i < valuepair.length; i++){
cb(valuepair[i].key, valuepair[i].value)
}
}
}
class ValuePair {
constructor(key, value){
this.key = key
this.value = value
}
}
var mymap = new Dictionary();
mymap.set('name','Eric')
mymap.set({a:1},'aaa')
mymap.forEach((key,value)=>{
console.log(key,value)
})
</script>
</body>
</html>