比较Node.js中的两个uuids

时间:2015-04-22 15:14:19

标签: node.js cassandra comparison uuid

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

问题在于,当我比较两个应该等于的uuids时,我总是得到一个假值。

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

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

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

如果有人可以帮助我,那将是一件非常愉快的事情!

4 个答案:

答案 0 :(得分:4)

正如Ary所提到的,内容是相同的,但地址不是,所以比较返回false。

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

答案 1 :(得分:1)

内容相同但不应包含地址。 如果你的comparaison返回false,那么你的变量可能是Object类型。

答案 2 :(得分:0)

我做这样的事情,并且有效:

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

答案 3 :(得分:-1)

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

尝试直接比较Uuid'

      $scope.tsearch = function() {
          //clear the select
          $scope.selectPost = '';

          $scope.search = $scope.searchText;
          $http.get('http://jsonplaceholder.typicode.com/comments').success(function(data2) {
              $scope.records = [];
              data2.forEach(function(r) {
                  if (r && r.postId && r.postId === $scope.selectPost.id) {
                      $scope.records.push(r);
                  }
              });
         });
    };