我有两个字符串,如
我正在做的是通过连接用户ID在两个用户之间创建一个独特的聊天ID 但是问题是id形成的可能是 a + b 或 b + a 我试图找到一个方法,以便它代表字符串 a 是更大或 b 因此结果始终是唯一ID 我尝试了什么: -
词汇排序
let a="59fc5478fb7dbd08703f2539";
let b="59fc54d3fb7dbd08703f253a";
if(a>b){
let chatId=a+b;
}else{
let chatId=b+a;
}
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 }
根据词汇排序,结果应该是唯一的,但得到两个不同的结果
任何帮助都会非常感谢
答案 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)