2013-12-14 40 views
4

我有一個for循環,看起來像有什麼辦法隨機循環通過對象的鍵?

for (var key in myObjectArray) { 
    [code] 
} 

我願做同樣的事情,除了有輸出的順序打亂每次。

有沒有簡單的方法來做到這一點?我可以創建一個單獨的數組鍵,然後對它們進行排序,然後使用索引進行for循環...但是這看起來很多工作並且效率很低。

+0

http://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array –

+0

它已經有點隨機,因爲訂單不能保證在一個對象中。 – adeneo

+3

@adeneo不保證,但確定性。 –

回答

7

是的。首先,您需要一系列密鑰:

var keys; 
if(Object.keys) keys = Object.keys(myObjectArray); 
else keys = (function(obj) {var k, ret = []; for(k in obj) if(obj.hasOwnProperty(k)) ret.push(k); return ret;})(myObjectArray); 
// isn't browser compatibility fun? 

接下來,洗牌您的數組。

keys.sort(function() {return Math.random()-0.5;}); 
// there are better shuffling algorithms out there. This works, but it's imperfect. 

最後,遍歷您的數組:

function doSomething(key) { 
    console.log(key+": "+myObjectArray[key]); 
} 
if(keys.forEach) keys.forEach(doSomething); 
else (function() {for(var i=0, l=keys.length; i<l; i++) doSomething(keys[i]);})(); 
+0

好的,謝謝。這幾乎是我已經做的事情,看起來相當複雜,知道排序數組是多麼容易。 –

+0

如果你必須刪除我的「thx,me2」,但我真的很喜歡這樣的天才答案 – 2014-07-26 05:04:11