解构地图

新手上路,请多包涵

如果我在 javascript 中有这样的对象:

 let obj = {b: 3, c: 4, d: 6}

如果我解构它,我可以很容易地取出不同的部分,例如,如果我这样做,我可以只得到 c 和 d:

 let {c, d} = obj

现在这很好,但是如果我想制作地图:

 let m = new Map()
m.set('b', 3).set('c', 4).set('d', 6)

我可以通过以下方式获取单个元素:

 let c = m.get('c')
let d = m.get('d')

但是有什么方法可以像我们对标准对象所做的那样解构像地图这样的对象。我发现上面的语法在很多情况下使用起来非常简单,以至于在使用地图时它实际上是一个很大的缺点;尽管默认情况下您可以获得迭代器等等(在这里列出优势哈哈)。

原文由 user2662833 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 253
2 个回答
 const m = new Map();
m.set('b', 3)
 .set('c', 4)
 .set('d', 6);

const [[,b], [,c], [,d]] = m;

console.log(b, c, d);
 const [[,b], [,c], [,d]] = m;

原文由 Salih Şenol Çakarcı 发布,翻译遵循 CC BY-SA 4.0 许可协议

你不能直接解构 Map ,你必须先转换为对象或者做一些奇特的事情,比如使用 Proxy 来拦截 get 调用。像这样的辅助函数:

 function getFromMap (map) {
  return new Proxy(map, {
    get (obj, prop) {
      return obj.get(prop)
    }
  })
}

let m = new Map()
m.set('b', 3).set('c', 4).set('d', 6)

let { b, d } = getFromMap(m)
console.log(b, d)

感谢@Felix Favor 的评论。使用最近的 Object.fromEntries 函数中间转换映射到对象可以被简化:

 let { b, d } = Object.fromEntries(m)

原文由 dfsq 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏