比较 Node.js 中的两个 uuid

Comparing two uuids in Node.js

我有一个问题,我无法通过我在网络上的研究找到任何答案。我在 Node.js 和 Cassandra 中开发 Web 应用程序。我目前正在开发一个通知系统,我必须比较两个 uuid 以确保我不会向执行原始操作(引发通知)的人发送通知。

问题是,当我比较两个应该相等的 uuid 时,我总是得到一个错误的值。

这是我目前正在处理的代码示例:

console.log('user_id :', user_id.user_id);
console.log("user id of the current user :", this.user_id);

console.log(user_id.user_id == this.user_id);
console.log(user_id.user_id === this.user_id);

这里是结果的显示:

user_id : Uuid: 29f1227d-58dd-4ddb-b0fa-19b7fc02fbe8
user id of the current user : Uuid: 29f1227d-58dd-4ddb-b0fa-19b7fc02fbe8
false
false
user_id : Uuid: c8f9c196-2d63-4cf0-b388-f11bfb1a476b
user id of the current user : Uuid: 29f1227d-58dd-4ddb-b0fa-19b7fc02fbe8
false
false

如您所见,第一个 uuid 应该是相同的。它们是使用 nodejs cassandra 驱动程序中的 uuid 库生成的。 我不明白为什么当我能够使用指定的 uuid 在我的 Cassandra 数据库上发出任何请求时我不能比较它们。

如果有人能帮助我,我将不胜感激!

看起来你的 user_id 实际上是一个对象 "containing" 一个 Uuid,而不是 Uuid 本身。 user_id 个对象不一样,但它们包含相同的数据。

尝试直接比较 Uuid,例如:

console.log(user_id.user_id.Uuid == this.user_id.Uuid);
console.log(user_id.user_id.Uuid === this.user_id.Uuid);

内容相同,但他们的地址应该不同。 如果您的比较 returns 为假,则可能是您的变量是对象类型。

正如 Ary 提到的,内容相同但地址不同,因此比较 returns 错误。

cassandra-driver 的 UUID 对象提供了一个 equals 函数,它比较 UUID 内容的原始十六进制字符串,您可以为此使用:

> var uuid1 = uuid.fromString('29f1227d-58dd-4ddb-b0fa-19b7fc02fbe8')
> var uuid2 = uuid.fromString('29f1227d-58dd-4ddb-b0fa-19b7fc02fbe8')
> uuid1 == uuid2
false
> uuid1 === uuid2
false
> uuid1.equals(uuid2)
true

我这样做了,效果很好:

// assuming there are 2 uuids, uuidOne uuidTwo  
uuidOne.toString() === uuidTwo.toString()