jQuery从一个字符串数组中随机选择一个值

4
我知道如何在PHP中做到这一点,但是在JavaScript中,数组有些奇怪。
因此,我有一组图像转换效果,其中的效果使用缓动方程。对于某些效果,我想从多个值的数组中选择一个随机值:
类似于: easing:randomFrom(array('easeOutElastic','easeOutBounce','easeOutSince')),
4个回答

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

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

我已经非常接近了,但你忘记返回值了 :-P - Naftali
@Neal,糟糕了,当你做太多Ruby时就会发生这种情况。 - Dogbert

5

试试这个:

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

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)的解决方案。

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/


我不明白为什么在原始解决方案中,你需要每次都创建一个新数组?为什么不直接返回$.easing内的元素?http://jsfiddle.net/psWvy/2/ - nonopolarity

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接