使用javascript从关联数组中选择随机值? [复制]

Posted

技术标签:

【中文标题】使用javascript从关联数组中选择随机值? [复制]【英文标题】:pick random value from associated array using javascript? [duplicate] 【发布时间】:2011-10-02 08:56:39 【问题描述】:

可能的重复:javascript: Getting random value from an arrayHow can I choose an object key at random?

假设我们有一个这样的数组:

var MrArray = new Array(5);
MrArray['one']='oneValue';
MrArray['two']='twoValue';
MrArray['three']='threeValue';
MrArray['four']='fourValue';
MrArray['five']='fiveValue';

好吗? 数组是关联的。 我们有字符串键和字符串值。 现在!我如何从中选择一个随机值? 编辑:我想这样使用:

<A href="Array value Here">Array Key Here</a>

问候 山姆

【问题讨论】:

您对 JavaScript 中的数组感到非常困惑。数组总是被索引并且从不关联。但是,数组只是特殊的对象,对象允许您像在代码中那样定义键。请参阅andrewdupont.net/2006/05/18/… 了解更多信息。 谢谢大家,但我想同时选择 Key 和 Value。 【参考方案1】:

使用here描述的方法,我们可以创建如下函数:

function randomKey(obj) 
    var ret;
    var c = 0;
    for (var key in obj)
        if (Math.random() < 1/++c)
           ret = key;
    return ret;

它返回一个随机密钥,因此要从MrArray 获取随机值,请执行以下操作:

var value = MrArray[randomKey(MrArray)];

jsPerf benchmark比较这个和另一个答案的速度。

【讨论】:

+1 表示1/++c。我想我以前没见过这种把戏。【参考方案2】:

这里:

function fetch_random(obj) 
    var temp_key, keys = [];
    for(temp_key in obj) 
       if(obj.hasOwnProperty(temp_key)) 
           keys.push(temp_key);
       
    
    return obj[keys[Math.floor(Math.random() * keys.length)]];

源:How can I choose an object key at random?

【讨论】:

以上是关于使用javascript从关联数组中选择随机值? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何确保从数组中随机选择的下一个值与使用 Javascript 的当前值不同? [复制]

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

从数组中选择一个随机值

从JavaScript中的数组中选择随机数量的元素

如何从 C# 中的泛型类型数组中选择一组随机值?

从数组中采样一个随机子集