【JS】细说Map的使用

293 阅读1分钟

这一帖用来写Map对象的一些使用注意事项:

1.Map的key是指同一个引用,也就是引用比较,而不是值比较,什么意思?上代码:

const minimumLengthEncoding = (words) => {
    let map = new Map();

    const buildTrie = (words) => {
        let root = {};

        for(const word of words){
            const len = word.length;
            let node = root;

            for(let i = len - 1; i >= 0; i--){
                const c = word[i];

                if(!node[c]) node[c] = {};
                node = node[c];

                if(i == len - 1){
                    if(!node[c]) map.set(c, 0);
                    const pre = map.get(c);
                    
                    const cur = Math.max(pre, len);

                    
                    map.set(c, cur);

                    console.log(map.get("e"));
                }
            }
        }

        return root;
    };

    let trie = buildTrie(words);

    return map;
};

这段代码是我在做LC-820时候写的初步代码,在建立字典树的过程中发现,哈希表map里面的值出现了bug:

也就是这一段:

if(!node[c]) map.set(c, 0); 
const pre = map.get(c); 
const cur = Math.max(pre, len); 
map.set(c, cur); 
console.log(map.get("e"));

bug的原因:Map对象的key是引用比较,你上一个来的确实是“e”,下一个单词的插入来的也是“e”,两个值是一样的,但是引用不一样,所以Map当成不同的东西。

解决方案:用{},相较于Map的缺点有很多,最重要的就是性能不如Map。