我对javascript相对较新。我正在寻找一个javascript函数来根据给定的字符串输入获取给定数组的任意元素。
随机(种子)功能会有用,但我找不到。 或者也许是对字符串中的字节进行xor散列的方法。
我不能使用jquery,我希望得到一个相对较短的答案。
编辑示例:
var myArray = ["foo", "bar", "24", "asdf"];
签名看起来像
function ArbitraryElement(arr, seed)
和输出看起来像:
ArbitraryElement(myArray, "what") // "foo"
ArbitraryElement(myArray, "that") // "24"
ArbitraryElement(myArray, "what") // "foo"
ArbitraryElement(myArray, "boo") // "24"
ArbitraryElement(myArray, "cat") // "asdf"
// etc...
答案 0 :(得分:2)
您可以将char代码与reduce,IE9 native和IE8及以下内容相加,其中shim包含在链接中:
function ArbitraryElement(arr, seed) {
seed = (seed || '') + "xx"; // ensure a seed that can be reduced
var charCodes = seed.split('').reduce(function(a, b, i) {
return (i == 1 ? a.charCodeAt(0) : +a) + b.charCodeAt(0);
});
return arr[charCodes % arr.length]
}
编辑:
答案 1 :(得分:1)
我认为你希望这个“数组查找”是确定性的,因为传入相同的字符串会导致访问相同的数组索引?
如果是这样,我建议对字符串执行散列,然后按照数组的大小对其进行修改。
You can use this to compute an MD5 hash
var foo = getHash(inputString);
var index = foo % myArray.length;
答案 2 :(得分:0)
这是一个函数从数组中返回一个随机元素(不需要种子):
function getRandomItem(input) {
var index = Math.floor(Math.random() * input.length);
return(input[index]);
}
var myArray = ["foo", "bar", "24", "asdf"];
getRandomItem(myArray);
getRandomItem(myArray);
getRandomItem(myArray);