map-字典结构-new

<!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>
posted @ 2024-04-03 13:40  13522679763-任国强  阅读(8)  评论(0)    收藏  举报