Hug*_*lpz 5 javascript random jquery json iterator
我有一个JSON对象,它由一长串其他JSON对象组成,这些对象有一些共同的属性,如:
var myData = {
"0291" : { "Firstname" : "Jeremy", "Surname" : "Dyson" },
"0398" : { "Firstnname" : "Billy", "Surname" : "Bunter" },
"6714" : { "Firstnname" : "Harry", "Surname" : "Peterson" },
"9080" : { "Firstnname" : "Barry", "secondname": "Joe", "Surname" : "Mainwaring"}
...
...
}
Run Code Online (Sandbox Code Playgroud)
我已经构建了一个html模板.使用JS,我想以随机顺序选择或迭代(随机选择+循环)数据{}中的对象,这样我就可以为每个访问者动态填写HTML.随机部分很重要,因此每个访问者可能会得到不同的数据.
简单的JavaScript或jQuery解决方案将在部署它的上下文中工作.
编辑:我实施的解决方案如下.
1.收集所有密钥:
var keyArray = Object.keys(myData);
Run Code Online (Sandbox Code Playgroud)
2. 随机播放功能:
function shuffle(o){ //v1.0
for(var j, x, i = o.length; i; j = parseInt(Math.random() * i), x = o[--i], o[i] = o[j], o[j] = x);
return o;
};
keyArray = shuffle(keyArray); // shuffle it!
Run Code Online (Sandbox Code Playgroud)
3.循环迭代:
for (var i = 0; i < keyArray.length; ++i) {
var current = data[keyArray[i]];
... // what you want to do each time.
}
Run Code Online (Sandbox Code Playgroud)
首先,将data对象转换为数组(第一层的键将丢失),如下所示: https: //stackoverflow.com/a/11474071/664108
var dataArray = $.map(data, function (value, key) { return value; });
Run Code Online (Sandbox Code Playgroud)
然后对数组进行打乱(请参阅如何随机化(打乱)JavaScript 数组?)
或者,您可以只洗乱键,然后对原始对象进行操作。这样你仍然拥有钥匙:
var keyArray = $.map(data, function (value, key) { return key; });
shuffle(keyArray); // example (shuffle function has to be implemented, see above)
for (var i = 0; i < keyArray.length; ++i) {
var current = data[keyArray[i]];
// do stuff with current dataset
}
Run Code Online (Sandbox Code Playgroud)
根据评论补充
键数组也可以通过以下方式创建:
var keyArray = Object.keys(data);
Run Code Online (Sandbox Code Playgroud)
但请注意,这仅适用于现代浏览器,如果您想支持 IE 8 及以下版本的 Internet Explorer,则不应使用它(请参阅:http ://msdn.microsoft.com/en-us/library/ie/ff688127 (v=vs.94).aspx )