leetcode第576题引入js中Map和Object比较

2020-06-11  本文已影响0人  sc8816

Map对象是一种有对应 键/值 对的对象, Object也是 键/值 对的对象 ;都是用来存储数据的一种结构,这两个结构有什么比较的呢?

下面就引入leetcode第576题


image.png

代码1

var findPaths = function(m, n, N, i, j) {
    const mod = Math.pow(10, 9) + 7
    let memo = {}    //对象
    let dfs = (i, j, k)=>{
        if(k<0) return 0
        if (i < 0 || i >= m || j < 0 || j >= n) {
            return 1
        }
        let key = `${i}-${j}-${k}`
        if(memo[key]) return memo[key]

        let res = 0
        res += dfs(i - 1, j, k - 1)
        res += dfs(i + 1, j, k - 1)
        res += dfs(i, j - 1, k - 1)
        res += dfs(i, j + 1, k - 1)
        res%=mod
        memo[key] = res
        return res
    }

    return dfs(i, j, N)
};

代码2

var findPaths = function(m, n, N, i, j) {
    const mod = Math.pow(10, 9) + 7
    let memo = new Map() //map
    let dfs = (i, j, k)=>{
        if(k<0) return 0
        if (i < 0 || i >= m || j < 0 || j >= n) {
            return 1
        }
        let key = `${i}-${j}-${k}`
        if(memo.has(key)) return memo.get(key)

        let res = 0
        res += dfs(i - 1, j, k - 1)
        res += dfs(i + 1, j, k - 1)
        res += dfs(i, j - 1, k - 1)
        res += dfs(i, j + 1, k - 1)
        res%=mod
        memo.set(key, res)
        return res
    }

    return dfs(i, j, N)
};
我一开始使用是代码一进行提交,每次都是timeout,到第八十多个用例时候死活过不了,然后就换了第二种方法,使用map做为备忘录然后就 image.png

what fuck???map本质上也是继承Object为什么使用map会比使用对象的效率好这么多?
然后翻了一下MDN对map的介绍也有对Map和Object的对比


image.png

从图中可以看出Map 在很多时候优于 Object,但是作为 JavaScript 最基础的数据类型,还是有很多情景更适合使用 Object。那再延伸一下什么时候使用Object,在什么时候使用Map更合适呢

使用Map

  1. 需要按照进入顺序进行返回
  2. 需要获取key的size时候
  3. key值可以是任意类型
  4. 进行迭代
  5. key 的数据量很多,以及进行频繁操作时候,不确定key的情况下

使用Object

  1. 当所要存储的是简单数据类型,并且 key 都为字符串或者整数或者 Symbol 的时候,优先使用 Object ,因为Object可以使用 字符变量 的方式创建,更加高效。
  2. 当需要在单独的逻辑中访问属性或者元素的时候,应该使用 Object,例如:通过访问obj上面的方法
  3. JSON 直接支持 Object,但不支持 Map
上一篇 下一篇

猜你喜欢

热点阅读