我需要根据为传递的字符串计算出的哈希值获得一个随机数组项:

var animals = [ 'dog', 'cat', 'horse', 'cow', 'tiger', 'trump' ];
function getFixedItem(str, arr) {
  //magic goes here
  var hash = anyFunctionToCalcHash(str);
  var magicNumber = ???; // calculated based on hash, must be between 0 and arr.length - 1
  return arr[magicNumber];
}


预期类似:

getFixedItem('john doe', animals); // returns cat
getFixedItem('john moe', animals); // returns horse
getFixedItem('john doe', animals); // returns cat
getFixedItem('abc102030', animals); // returns trump
getFixedItem('john doe', animals); // returns cat

最佳答案

您可以使用输入字符串的ASCII码来计算数字。然后使用模数将该数字从0转换为数组的长度。

...
var sum = 0;
str.split('').forEach(a => sum += a.charCodeAt(0));
var magicNumber = sum % arr.length;
return arr[magicNumber]

09-25 21:25