当前位置: 首页 > 知识库问答 >
问题:

何时在ES6中使用对象贴图vs贴图类[重复]

谯灿
2023-03-14

假设我想创建一个字典,例如,一个或多个车型的汽车品牌。

在ES6中,我似乎可以用两种不同的方式做到这一点。

1.创建对象映射:

代码:

const makesAndModels = {
    "mazda": [
        { name: "Miata" },
        { name: "626" }
    ],
    "toyota": [
        { name: "Camry" }
    ],
    ...
};

2.创建ES6 Map实例:

代码:

const makes = {
    mazda: { name: "Mazda" },
    toyota: { name: "Toyota" }
};

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

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

共有1个答案

皇甫鸿远
2023-03-14

以下是迄今为止我发现的差异:

>

  • Map允许您使用任何类型的密钥。因此,如果您愿意,您可以将整个对象存储在键中,对于索引签名,TypeScript目前只支持字符串或数字键。

    Map仅在ES6中受本机支持。如果目标为ES5或更低,则需要提供polyfill。

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

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

    包括上述未提及的以下项目:

    >

    使用size属性可以轻松获得贴图的大小,而对象中属性的数量必须手动确定。

    映射是一个iterable,因此可以直接迭代,而对对象进行迭代需要以某种方式获取其键并对其进行迭代。

    一个对象有一个原型,因此如果你不小心的话,地图中的默认关键点可能会与你的关键点发生碰撞。从ES5开始,可以使用map=Object绕过这一点。create(null),但很少这样做。

    在涉及频繁添加和删除密钥对的场景中,Map可能表现得更好。

  •  类似资料:
    • 我一直在看MDN上的新ES6文档,我找不到地图对象的实际用途,因为普通对象无法工作。有没有人有地图的使用案例,并解释为什么一个对象在这种情况下不能工作?

    • 目前,我在项目中使用protobuf版本2。到目前为止,所有的信息都很有效;然而,我在尝试使用“map”关键字时遇到了一个障碍。 需要映射背后的TLDR用法是,我想将一些JSON键/值对传递给服务器进行查找,并将可能的数据日志传递给服务器(使用JSON消息接口)。 我目前正在使用文档页面上推荐的向后兼容方法:https://developers.google.com/protocol-buffer

    • 有没有更好的方法来转换贴图

    • 参考[Stackoverflow]Scala:将map转换为case类我尝试复制其中一个响应,我看到以下错误: <代码>无法构造com的实例。实践斯卡拉。Test“(不存在任何创建者,如默认构造):无法从[源:未知;行:-1,列:-1]处的对象值(无委托或基于属性的创建者)反序列化 代码: 这个错误说明了什么?我错过了什么吗?

    • 我有一个4个工人的分布式系统,每个工人发送1张地图 我尝试的方法是将workers中的所有映射项收集到ArrayList中,然后使用并行流,我想使用reduce方法将它们减少到一个列表中,并将其初始化到reducer中。这是我的代码: 我在reduce方法上得到以下编译错误: 方法reduce(Map

    • 我正在尝试使用mapbox创建多段线贴图,我能够正确地创建它。用户可以返回并在其配置文件中查看多段线地图。 疑问-是否有任何方法可以将我的lat long列表转换为某种格式并存储在db中,然后从db中获取并渲染贴图? 我也检查了geojson格式,但如果我们将geojson与mapbox一起使用,它将生成静态映射。 我使用flutter_map生成地图。 更新- 目前我正在使用flutter_ma