根据字符串半随机选择数组

时间:2016-11-29 15:50:24

标签: javascript node.js random hash

我有这个问题。我想根据任意6个字母的字符串随机选择数组[1,2,3,4],这样如果字符串相同,这个选择总是相同的。

因此,如果我有字符串'dogdog',则函数将始终返回'3',但'4'返回'bigcat'等。

我认为解决方案可能是首先散列字符串。如何将哈希字符串转换为数组中的选择?

2 个答案:

答案 0 :(得分:1)

您可以从字符串计算哈希值,并在[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]));




答案 1 :(得分:0)

一个非常简单的哈希函数:

  • 用数字改变你单词的每个字母(a是1,b是2等)。我们打电话给 w 更改一个数字中的整个单词。
  • 计算 i = w mod 4. i 将是介于0和3之间的数字。为其添加1。
  • 恭喜,您现在可以将任何单词与1到4之间的“随机”数字相关联。您当然可以将4替换为任何其他数字,以将每个世界与任意范围内的随机数相关联。