我有一個for循環,看起來像有什麼辦法隨機循環通過對象的鍵?
for (var key in myObjectArray) {
[code]
}
我願做同樣的事情,除了有輸出的順序打亂每次。
有沒有簡單的方法來做到這一點?我可以創建一個單獨的數組鍵,然後對它們進行排序,然後使用索引進行for循環...但是這看起來很多工作並且效率很低。
我有一個for循環,看起來像有什麼辦法隨機循環通過對象的鍵?
for (var key in myObjectArray) {
[code]
}
我願做同樣的事情,除了有輸出的順序打亂每次。
有沒有簡單的方法來做到這一點?我可以創建一個單獨的數組鍵,然後對它們進行排序,然後使用索引進行for循環...但是這看起來很多工作並且效率很低。
是的。首先,您需要一系列密鑰:
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]);})();
好的,謝謝。這幾乎是我已經做的事情,看起來相當複雜,知道排序數組是多麼容易。 –
如果你必須刪除我的「thx,me2」,但我真的很喜歡這樣的天才答案 – 2014-07-26 05:04:11
http://stackoverflow.com/questions/2450954/how-to-randomize-shuffle-a-javascript-array –
它已經有點隨機,因爲訂單不能保證在一個對象中。 – adeneo
@adeneo不保證,但確定性。 –