【问题标题】:When defining a key:value pair structure when object literal is prefered over array definition?当对象文字优先于数组定义时定义键:值对结构时?
【发布时间】:2019-09-27 05:06:07
【问题描述】:

假设我想定义一个包含不同键:值组合的结构。什么时候我更喜欢第一而不是第二?

hashMap = [ ] 

hashMap["first"] = 1

object = { first : 1 }

object["first"] == hashMap["first"] // so they are the same basically

【问题讨论】:

  • 何时使用数组存储键/值对?绝不。使用对象或Map

标签: javascript types hashmap


【解决方案1】:

总是。数组用于有序的值列表。尽管它们碰巧继承自 Object.prototype,但没有人会期望数组的值超出其数字索引(在大多数情况下) - 这将是混淆的主要来源。这不是数组的用途。

如果你想要一个键值对的集合,总是更喜欢一个普通的对象而不是一个数组。对象用于键值对的集合。数组仅用于值的有序集合。

【讨论】:

    【解决方案2】:

    始终将对象用于非数字键集合。这有多种原因:

    (1) 数组针对数字键访问进行了优化,因此使用非数字键会更慢。对象被设计为任意键值存储。

    (2) 序列化从数组中移除所有非数字键:

    const arr = [];
    arr.key = "test";
    console.log(JSON.parse(JSON.stringify(arr))); // []
    

    (3) Array 的属性和方法可能会让你感到困惑:

    • .length 只计算数字键。

    • .map, .forEach, ... 只会遍历数字键。

    • for..of 只会遍历数字键。

    【讨论】:

      猜你喜欢
      • 2021-10-28
      • 2011-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 1970-01-01
      • 1970-01-01
      • 2021-09-24
      相关资源
      最近更新 更多