当前位置: 首页 > 面试题库 >

如何为JavaScript Set自定义对象相等性

越飞鸾
2023-03-14
问题内容

新的ES 6(和谐)引入了新的Set对象。Set使用的身份算法类似于===运算符,因此不太适合比较对象:

var set = new Set();
set.add({a:1});
set.add({a:1});
console.log([...set.values()]); // Array [ Object, Object ]

如何自定义Set对象的相等性以进行深层对象比较?有没有像Java一样的东西equals(Object)


问题答案:

ES6 Set对象没有任何比较方法或自定义比较可扩展性。

.has().add().delete()方法只关闭它是一个基本相同的实际物体或相同的值,没有办法插头插入或更换只是逻辑。

你大概可以从派生您自己的对象Set和替换.has().add().delete()与一些做了深刻的对象比较方法,先找到,如果该项目已经在设置,但性能可能不会很好,因为底层Set对象不会帮助完全没有
调用原始对象之前,您可能需要对所有现有对象进行蛮力迭代才能找到匹配项.add()

5.2为什么我不能配置映射和设置比较键和值的方式?

问题:如果有一种方法可以配置哪些映射键和哪些设置元素被认为是相等的,那就太好了。为什么不在那里?

答:由于难以正确有效地实施,该功能已被推迟。一种选择是将回调传递给指定相等性的集合。

Java中可用的另一个选项是通过对象实现的方法(Java中的equals())指定相等性。但是,这种方法对于可变对象是有问题的:通常,如果对象发生更改,则其在集合中的“位置”也必须更改。但这不是Java中发生的情况。JavaScript可能会走上一条更安全的路线,即仅对特殊的不可变对象(所谓的值对象)启用按值比较。按值比较意味着,如果两个值的内容相等,则认为这两个值相等。在JavaScript中按值比较原始值。



 类似资料:
  • 问题内容: 我想将自定义类型的对象添加到集合中。我有几个相同,即它们的公共变量值相同。 我不希望将多个“相同”对象的实例添加到集合中,但是每次创建新对象时,总是将其添加。 这是因为类Object的equals方法在对象上实现了最有区别的对等关系:“对于x和y的任何非空引用值,当且仅当x和y引用同一个对象时,此方法返回true(x = = y的值为true)。” 我可以覆盖此对象的equals方法以

  • 我将springboot控制器与@RequestBody一起使用。我有以下json请求正文 我有一个对应的POJO 我有控制器就像 显然它不起作用,因为是请求中的字符串,而它在MyObject中是布尔值。我希望它有一个逻辑,所以如果在请求中,它将在MyObject中转换为布尔值。Spring有什么机制来实现这一点?

  • 我正在努力找出如何使用Java流从对象值等于x的自定义对象列表中收集自定义对象。 这没有编译,但我不认为我离得很远--有人能指出我在哪里出错吗?

  • 问题内容: 严格的相等运算符将告诉您两个对象 类型 是否相等。但是,有没有办法判断两个对象是否相等, 就像 Java中 的哈希码 值 一样 ? 与这个问题相似,但需要更多的学术答案。上面的场景演示了为什么必须要有一个,而我想知道是否有任何 等效的解决方案 。 问题答案: 简短的答案 简单的答案是:不,没有通用的方法可以确定一个对象是否与您所指的含义相等。例外是,当您严格考虑对象是无类型的时。 长答

  • 这是我的字符串格式的肥皂xml,我需要如何在Farm对象中形成它。Farm是我的自定义类,任何库都是现成的 使用此代码后,我得到了异常 意外元素(uri:“http://yyyyyy . yyyyy * * * * * * * *”,local:“farm”)。预期的元素有

  • 问题内容: 我需要在Python中创建一个“容器”对象或类,以记录我也定义的其他对象。此容器的一项要求是,如果两个对象被视为相同,则将一个(一个)删除。我的第一个想法是使用a作为包含对象,以完成此要求。 但是,该集合不会删除两个相同的对象实例之一。我必须定义什么才能创建一个? 这是Python代码。 口译员 显然,由调用的不是集合所调用的方法。叫什么 我还必须定义什么其他方法? 注意: s必须保持