javascript - 如何从 JSON 字典中按键检索随机 JSON 对象?

标签 javascript jquery json random 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"}
    ...
    ...
}

我已经构建了一个 html 模板。使用 JS,我想以随机顺序选取或迭代(随机选取 + 循环)data{} 中的对象,这样我就可以为每个访问者即时填写 HTML。随机部分很重要,因此每个访问者可能会得到不同的数据。

纯 JavaScript 或 jQuery 解决方案将在部署它的上下文中工作。


编辑:我实现的解决方案如下。

<强>1。收集所有 key :

var keyArray = Object.keys(myData);

<强>2。 Shuffle function :

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!

<强>3。循环迭代:

for (var i = 0; i < keyArray.length; ++i) {
    var current = data[keyArray[i]];
    ... // what you want to do each time.
}

最佳答案

首先,将 data 对象转换为数组(第一层的键将丢失),如下所示:https://stackoverflow.com/a/11474071/664108

var dataArray = $.map(data, function (value, key) { return value; });

然后打乱数组(参见 How to randomize (shuffle) a JavaScript array? )

或者,您可以只打乱键,然后对原始对象进行操作。这样你也仍然有 key :

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
}

来自评论的补充

键数组也可以通过以下方式创建:

var keyArray = Object.keys(data);

但请注意,这仅适用于现代浏览器,如果您想支持 IE 8 及以下版本的 Internet Explorer,则不应使用它(参见:http://msdn.microsoft.com/en-us/library/ie/ff688127(v=vs.94).aspx)

关于javascript - 如何从 JSON 字典中按键检索随机 JSON 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14697371/

相关文章:

javascript - 传递全局变量来导入 JS 模块

java - 是否可以在同一个 MessageFormat 中使用多个 Locales?

javascript - Storybook Addon-Docs 不显示代码片段

javascript - 如何使 bootstrap datetimepicker 仅选择时间

JavaScript 宽度检查以禁用事件

php - 如果可以选择,使用 JQuery 还是 PHP 构建 DOM 元素更好?

javascript - 尽管在 WebGL 中进行了优化,但帧速率仍然较低

javascript - slider 按钮停止移动时的 DOM 事件是什么

java - 我在 JSON 响应中收到一些特殊字符,因此无法解析 JSON

javascript - 在 JavaScript 中使用 "address string"从 json 对象获取字段