【问题标题】:JavaScript sets and value objects [duplicate]JavaScript 集合和值对象 [重复]
【发布时间】:2015-05-30 02:18:11
【问题描述】:

我想在 JavaScript 中创建一个 setvalue objects。问题是在 JavaScript 中相等是基于身份的。因此,具有相同值的两个不同对象将被视为不相等:

var objects = new Set;

objects.add({ a: 1 });
objects.add({ a: 1 });

alert(objects.size);   // expected 1, actual 2

你如何解决这个问题?

【问题讨论】:

  • @elclanrs 唯一的问题是与字符串化和解析数据相关的开销。
  • 在我的一个库中,我有自己的 Map 实现,它至少与 API 兼容。我只是使用 toString 方法作为 has 函数,它允许我将(原语的)数组视为元组。这当然不适用于对象。
  • 为什么在 MDN 明确指出 The Set object lets you store unique values of any type, whether primitive values or object references. 时使用集合(注意 unique)。要么对对象有一些不同,要么不使用集合。
  • @BardiHarborow 为什么使用集合?我想要一组值对象,这就是原因。我知道规范说什么,非常感谢。 Set 数据类型本身保证唯一性,而不是您添加到其中的内容。例如,var i = 0; while (i < 10) objects.add(1); 只会将1 添加到集合objects 中一次。您所说的“对对象有不同的东西”是什么意思?我不想对这些对象有任何不同。我希望它们是同一个对象,而不必担心它们具有相同的身份。不使用套装?好的,谢谢。这解决了我的问题。

标签: javascript set identity ecmascript-6 ecmascript-harmony


【解决方案1】:

使用JSON.stringify:

var objects = new Set;

objects.add(JSON.stringify({ a: 1 }));
objects.add(JSON.stringify({ a: 1 }));

alert(objects.size);

【讨论】:

    猜你喜欢
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多