В то время как комментарии касаются вашей основной проблемы, что возможно генерировать один и тот же га sh из-за функции encode
, выполняющейся более одного раза в одну и ту же миллисекунду, я хотел бы оставить это здесь в качестве примера адресации откладывая хеширование до получения уникального ключа:
function Coder(rootUrl) {
const urlHash = {}
return {
encode(longUrl) {
let hash
do {
hash = Date.now().toString(36)
} while (urlHash[hash])
urlHash[hash] = longUrl
return `${rootUrl}${hash}`
},
decode(shortUrl) {
return urlHash[shortUrl.substring(rootUrl.length)]
}
}
}
// usage example
const { decode, encode } = Coder('http://tinyurl.com/')
const url1 = encode('https://appmagic.io/classic/1')
const url2 = encode('https://appmagic.io/modern/1')
console.log('url1 encoded', url1)
console.log('url2 encoded', url2)
console.log('url1 decoded', decode(url1))
console.log('url2 decoded', decode(url2))
При этом вы сможете генерировать только один га sh за миллисекунду, но я полагаю, что это неплохой компромисс.