【发布时间】:2016-11-29 15:50:23
【问题描述】:
我有这个问题。我想根据任意 6 个字母的字符串从数组 [1,2,3,4] 中随机选择一个,这样如果字符串相同,这个选择总是相同的。
所以如果我有字符串 'dogdog' 函数将始终返回 '3',但 '4' 用于 'bigcat' 等。
我认为解决方案可能是首先对字符串进行哈希处理。如何将哈希字符串转换为数组中的选择?
【问题讨论】:
标签: javascript node.js random hash
我有这个问题。我想根据任意 6 个字母的字符串从数组 [1,2,3,4] 中随机选择一个,这样如果字符串相同,这个选择总是相同的。
所以如果我有字符串 'dogdog' 函数将始终返回 '3',但 '4' 用于 'bigcat' 等。
我认为解决方案可能是首先对字符串进行哈希处理。如何将哈希字符串转换为数组中的选择?
【问题讨论】:
标签: javascript node.js random hash
您可以从一个字符串计算一个哈希值,并在[hash % array.length] 处获取数组项。 DJB hashfunc 的示例(请参阅http://www.cse.yorku.ca/~oz/hash.html 了解更多信息):
function djbHash(s) {
let hash = 5381;
for (let c of s) {
hash = hash * 33 + c.charCodeAt(0);
}
return hash;
}
function mapToValues(s, values) {
return values[djbHash(s) % values.length];
}
console.log(mapToValues('dogdog', [1, 2, 3, 4]));
console.log(mapToValues('bigcat', [1, 2, 3, 4]));
【讨论】:
一个非常简单的哈希函数:
【讨论】: