【问题标题】:jQuery pick a random value from a array of stringsjQuery 从字符串数组中选择一个随机值
【发布时间】:2011-09-22 03:27:05
【问题描述】:

我知道如何在 PHP 中做到这一点,但在 javascript 中数组很奇怪。

所以我有一组图像转换,它们具有使用缓动方程的效果。 对于某些效果,我想从多个值的数组中获取一个随机值:

类似:

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

【问题讨论】:

    标签: javascript jquery arrays random


    【解决方案1】:
    function randomFrom(array) {
      return array[Math.floor(Math.random() * array.length)];
    }
    
    // in your code
    easing: randomFrom(['easeOutElastic', 'easeOutBounce', 'easeOutSince']),
    

    【讨论】:

    • 我已经很接近了,但你忘了返回:-P
    • @Neal,哎呀,当你做太多 Ruby 时会发生这种情况。
    【解决方案2】:

    试试这个:

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

    【讨论】:

      【解决方案3】:

      对于一个演示,我试图获得一个随机缓动字符串;)

      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/

      【讨论】:

      • 我不明白为什么在原来的解决方案中,每次都需要创建一个新数组?为什么不直接返回$.easing 中的元素呢? jsfiddle.net/psWvy/2
      【解决方案4】:

      这个问题我来晚了。如果您不介意向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)的解决方案。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-04
        • 2020-11-01
        • 2011-11-13
        • 1970-01-01
        • 2017-01-12
        • 1970-01-01
        • 2012-02-03
        相关资源
        最近更新 更多