我有一个类似
的for循环 for (var key in myObjectArray) {
[code]
}
我想做同样的事情,除了每次输出的输出顺序。
有没有简单的方法呢?我可以创建一个单独的键数组,对它们进行排序,然后使用索引进行for循环...但这似乎很多工作而且效率很低。
答案 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]);})();