首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在ES6中何时使用对象映射与映射类

在ES6中何时使用对象映射与映射类
EN

Stack Overflow用户
提问于 2018-09-16 14:37:19
回答 1查看 7.9K关注 0票数 5

假设我想创建一个字典,比如说,汽车制造一个或多个模型。

在ES6中,我似乎可以通过两种不同的方式来实现这一点。

1.创建一个对象映射:

代码:

代码语言:javascript
运行
复制
const makesAndModels = {
    "mazda": [
        { name: "Miata" },
        { name: "626" }
    ],
    "toyota": [
        { name: "Camry" }
    ],
    ...
};

2.创建ES6地图实例:

代码:

代码语言:javascript
运行
复制
const makes = {
    mazda: { name: "Mazda" },
    toyota: { name: "Toyota" }
};

const makesAndModels = new Map([
    [makes.mazda, [
        { name: "Miata" },
        { name: "626" }
    ]],
    [makes.toyota, [
        { name: "Camry" }
    ]],
    ...
]);

这两种方法的主要区别和优缺点是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-16 14:44:04

以下是我到目前为止发现的不同之处:

  • Map允许您使用任何类型的密钥。因此,如果需要,可以将整个对象存储在键中,其中,对于索引签名,类型记录当前只支持字符串或数字键。
  • 地图仅在ES6中提供本机支持。如果目标是ES5或更低,您需要提供一个多填充。

但不确定这些是否详尽无遗。

编辑:刚刚在Mozilla文档中发现了一个对象和地图比较部分,它看起来相当全面。

其中包括上文未提及的下列项目:

  • Map中的键是有序的,而添加到对象中的键则不是。因此,在迭代它时,Map对象会按插入顺序返回键。
  • 您可以使用size属性轻松获得Map的大小,而对象中的属性数量必须手动确定。
  • Map是可迭代的,因此可以直接迭代,而迭代对象则需要以某种方式获得其键并对其进行迭代。
  • 对象有一个原型,所以如果您不小心,映射中的默认键可能会与您的键发生冲突。对于ES5,可以使用map = Object.create(null)绕过它,但是很少这样做。
  • 在频繁添加和移除密钥对的场景中,Map可能执行得更好。
票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52355150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档