2011-07-10 57 views
0

可能重复:
JavaScript: Getting random value from an array
How can I choose an object key at random?使用javascript从关联数组中选择随机值?

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

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> 

问候 山姆

+0

你对JavaScript中的数组非常困惑。数组总是索引的,从不关联。然而,数组只是特殊的对象,并且对象允许您像定义代码一样定义键。有关详细信息,请参阅http://andrewdupont.net/2006/05/18/javascript-associative-arrays-considered-harmful/。 –

+0

谢谢大家,但我想在同一时间选择关键和价值。对于'1/++ c', – G0back

回答

8

使用方法描述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比较这个速度和对方的回答。

+0

+1。我不认为我以前见过这种伎俩。 – vhallac

1

这里:

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?