繁体   English   中英

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

[英]How to retrieve random JSON object by key from JSON dictionary?

我有一个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,我想以随机顺序选择或迭代(随机选择+循环)数据{}中的对象,这样我就可以为每个访问者动态填写HTML。 随机部分很重要,因此每个访问者可能会得到不同的数据。

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


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

1.收集所有密钥:

var keyArray = Object.keys(myData);

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!

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

然后将数组洗牌(请参阅如何随机化(混洗)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
}

来自评论的补充

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

var keyArray = Object.keys(data);

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

您是否考虑过随机生成JSON或者将其重新调整? 在Javascript中随机播放

如果您对阵列进行随机播放,则可以应用foreach并以随机顺序获取项目。 :)

注意:将一份ID复制起来可能会更快。

免责声明! 我认为对于你的情况你只需要伪随机性

使用Object.keys函数

var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']

更多: https//developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/keys

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM