2011-06-24 17 views
3

私はこれをPHPで行う方法を知っていますが、javascript配列は奇妙です。jQueryは文字列の配列からランダムな値を選択します

私はイージング方程式を使用する効果を持つ一連の画像トランジションを持っています。これを試してみてください

easing: randomFrom(array('easeOutElastic', 'easeOutBounce', 'easeOutSince')),

答えて

10
function randomFrom(array) { 
    return array[Math.floor(Math.random() * array.length)]; 
} 

// in your code 
easing: randomFrom(['easeOutElastic', 'easeOutBounce', 'easeOutSince']), 
+0

私はすごく近かったが、返すのを忘れてしまった:-P – Neal

+0

@Neal、oops、Rubyをあまりにも多くするとどうなるのか。 – Dogbert

5

:については

function randomFrom(arr){ 
    var randomIndex = Math.floor(Math.random() * arr.length); 
    return arr[randomIndex]; 
} 
1

何かのように:一定の効果については は、私は、複数の値の配列からランダムな値をピックアップしますデモ私はランダムなイージングストリングを取得しようとしていました;)

function getRandomEasing() { 
    var easingArr = []; 
    for(easing in $.easing){ 
     easingArr.push(easing); 
    } 
    var rnd = Math.floor(Math.random() * easingArr.length); 
    return easingArr[rnd]; 
} 

var randomEasing = getRandomEasing(); 

楽しいデモ:http://jsfiddle.net/aamir/psWvy/

+0

元のソリューションで毎回新しいアレイを作成する必要があるのはなぜですか? '$ .easing'の中に要素を直接返すだけではどうですか? http://jsfiddle.net/psWvy/2/ –

1

私はこの質問への後半のコーナーです。あなたはArrayにメソッドを追加する気にしない場合は、次のことができます。

Array.prototype.pickARandomElement = function() { 
    return this[Math.floor(Math.random() * this.length)]; 
} 

テストの実行:

> [10, 123, 777].pickARandomElement() 
10 

> [10, 123, 777].pickARandomElement() 
777 

> [10, 123, 777].pickARandomElement() 
777 

> [10, 123, 777].pickARandomElement() 
123 

次は楽しみのためだけにある:

Array.prototype.pickARandomElement = function() { 
    return this.sort(function() { return Math.random() - 0.5; })[0]; 
} 

それはシャッフルのようなものですカードのデッキと一番上のカードを返す。しかし、その時間の複雑さはO(n log n)なので、私はそれを実際には使用しません。ここでの最初の解決策は、O(1)の解決策です。

関連する問題