2011-09-21 31 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

那裏應該有一個逗號。他們是通常的英文意思。 –

相關問題