Javascript基于“字符串”种子的数组的任意元素

时间:2011-09-21 02:26:22

标签: javascript

我对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...

3 个答案:

答案 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]
}

编辑:

以下是更新:http://jsfiddle.net/sqA6Z/

答案 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);

在这里演示:http://jsfiddle.net/jfriend00/J5QKE/