我有這個問題。我想根據任意6個字母的字符串從數組中隨機選擇一個選項,以便在字符串相同的情況下該選項總是相同的。根據字符串半任意地從數組中進行選擇
所以,如果我有字符串「dogdog」函數將返回始終'3'
例如,但'4'
爲「bigcat」等
我認爲解決的辦法可能是第一個散列的字符串。如何將哈希字符串轉換爲數組中的選擇?
我有這個問題。我想根據任意6個字母的字符串從數組中隨機選擇一個選項,以便在字符串相同的情況下該選項總是相同的。根據字符串半任意地從數組中進行選擇
所以,如果我有字符串「dogdog」函數將返回始終'3'
例如,但'4'
爲「bigcat」等
我認爲解決的辦法可能是第一個散列的字符串。如何將哈希字符串轉換爲數組中的選擇?
您可以從一個字符串計算一個散列值,並獲取數組項目[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]));
一個非常簡單的哈希函數:
你的隨機數的算法給出了一個非常糟糕的分佈。 –
這是一個很好的解決方案,因爲哈希函數具有良好的分佈。更好的散列函數會給出更好的結果! –