有没有办法随机循环对象的键?

时间:2013-12-14 22:54:01

标签: javascript

我有一个类似

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

我想做同样的事情,除了每次输出的输出顺序。

有没有简单的方法呢?我可以创建一个单独的键数组,对它们进行排序,然后使用索引进行for循环...但这似乎很多工作而且效率很低。

1 个答案:

答案 0 :(得分:8)

是。首先,您需要一组键:

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]);})();