2011-09-21 32 views
1

我对JavaScript比较陌生。我正在寻找一个JavaScript函数来根据给定的字符串输入获取给定数组的任意元素。基于“字符串”种子的数组的Javascript任意元素

随机(种子)函数会很有用,但我找不到一个函数。 或者也许一种方法来异或散列字符串中的字节。

我不能使用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

实施例的字符串的输入,数组和预期输出,请。 –

+0

查看编辑的问题 –

+0

这就是确定性的词。这个功能应该是确定性的。 –

回答

2

你可以总结炭码与reduce,IE9本地和IE8及以下用垫片列入链接:

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/

+0

谢谢!太棒了。 –

+0

对于后代,如果种子是0或1个字符,则返回“未定义”。我只是将“xx”附加到种子上。 –

+0

@MichaelJSwart,很好的电话!我已经更新了答案。 – Joe

1

我认为你会喜欢这个“数组查找”是确定性的,因为传入相同的字符串会导致相同的结果rray索引被访问?

如果是这样,我建议对字符串执行散列,然后按数组大小对其进行修改。

You can use this to compute an MD5 hash

var foo = getHash(inputString); 
var index = foo % myArray.length; 
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/

+0

对不起,我正在寻找使用种子做出确定性的任意选择。不是随机选择。谢谢你的时间。 –

+0

什么是“确定性任意”?从来没有听说过。 – jfriend00

+0

那里应该有一个逗号。他们是通常的英文意思。 –

相关问题