在两个字符串中查找更大的字符串

时间:2017-11-08 18:06:31

标签: javascript node.js

我有两个字符串,如

  1. 59fc5478fb7dbd08703f2539
  2. 59fc54d3fb7dbd08703f253a
  3. 我正在做的是通过连接用户ID在两个用户之间创建一个独特的聊天ID 但是问题是id形成的可能是 a + b b + a 我试图找到一个方法,以便它代表字符串 a 是更大或 b 因此结果始终是唯一ID 我尝试了什么: -

    1. localeCompare()
    2. 词汇排序

      let a="59fc5478fb7dbd08703f2539";
      let b="59fc54d3fb7dbd08703f253a"; 
      if(a>b){
             let chatId=a+b;
             }else{
                   let chatId=b+a;
                   }
      
    3.   

      chatId形成的是59fc5478fb7dbd08703f253959fc54d3fb7dbd08703f253a

      当a和b值互换时

       let a="59fc54d3fb7dbd08703f253a"; 
       let b="59fc5478fb7dbd08703f2539";
              if(a>b){
                     let chatId=a+b;
                     }else{
                           let chatId=b+a;
                           }
      
        

      chatId形成的是59fc54d3fb7dbd08703f253a59fc5478fb7dbd08703f2539

      使用的实际代码

        let newChat = new Chat();
         newChat.from = user._id;
         newChat.towards = req.body.towards;
         if (req.body.towards > user._id) {
             newChat.chatId = req.body.towards + user._id;
         } else {
             newChat.chatId = user._id + req.body.towards;
         }
         newChat.message = req.body.message;
         newChat.save((err) => {
      

      保存的结果

        

      db.chats.find()

          { "_id" : ObjectId("5a034eeb16e42914fc3f9ff8"), "message" : "hi", "chatId" : "59fc54d3fb7dbd08703f253a59fc5478fb7dbd08703f2539", "towards" : ObjectId("59fc5478fb7dbd08703f2539"), "from" : ObjectId("59fc54d3fb7dbd08703f253a"), "time" : ISODate("2017-11-08T18:37:31.308Z"), "__v" : 0 }
          { "_id" : ObjectId("5a034f3a16e42914fc3f9ff9"), "message" : "hello!", "chatId" : "59fc5478fb7dbd08703f253959fc54d3fb7dbd08703f253a", "towards" : ObjectId("59fc54d3fb7dbd08703f253a"), "from" : ObjectId("59fc5478fb7dbd08703f2539"), "time" : ISODate("2017-11-08T18:38:50.247Z"), "__v" : 0 }
      

      根据词汇排序,结果应该是唯一的,但得到两个不同的结果
      任何帮助都会非常感谢

2 个答案:

答案 0 :(得分:0)

使用localeCompare()应该在这里做的诀窍(没有可选的locale参数)。

"a".localeCompare("b")将在a出现时返回负数索引,在b出现时返回正数索引,当它们相同时返回0。

答案 1 :(得分:0)

由于这些是MongoDB ID,因此它们是十六进制数。您可以将它们作为数字进行比较:

const a = '59fc5478fb7dbd08703f2539'
const b = '59fc54d3fb7dbd08703f253a'

const code = parseInt(a, 16) > parseInt(b, 16) ? a + b : b + a

console.log(code)