【问题标题】:How to retrieve random JSON object by key from JSON dictionary?如何从 JSON 字典中按键检索随机 JSON 对象?
【发布时间】:2013-01-19 18:43:20
【问题描述】:

我有一个 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。 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.
}

【问题讨论】:

  • 什么是生成 JSON?似乎在那一点上随机化它会更容易
  • @explosion:我开始编码,我手写了 4000 行的词法数据库。没有随机函数……还没有!

标签: javascript jquery json random iterator


【解决方案1】:

使用 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

【讨论】:

    【解决方案2】:

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

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

    然后洗牌(见How to randomize (shuffle) a JavaScript array?

    或者,您可以只是随机播放键,然后对原始对象进行操作。这样你也仍然拥有钥匙:

    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
    }
    

    来自 cmets 的添加

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

    var keyArray = Object.keys(data);
    

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

    【讨论】:

    • 我想我需要钥匙。确实,我现在需要再次掌握我的数据 > 随机键 > 来选择我想要的值。
    • 而不是: var keyArray = $.map(data, function (value, key) { return key; });让我们使用:var keyArray = Object.keys(data);
    • 我对您的答案投了赞成票,但接受了我在代码中实现的答案。 (注意:我接受自己的答案毫无意义。)
    【解决方案3】:

    您是否考虑过随机生成 JSON 或随机生成 JSON? Shuffle in Javascript

    如果您对数组进行洗牌,则可以应用 foreach 并以随机顺序获取项目。 :)

    注意:仅随机播放 ID 的副本可能会更快。

    免责声明!我假设对于您的情况,您只需要Pseudorandomness

    【讨论】:

    • 马里奥,再次感谢。你的 cmets 真的很适合我这个初学者,我确实在寻找 shuffle 功能。
    猜你喜欢
    • 2021-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-10
    • 2017-06-27
    • 1970-01-01
    相关资源
    最近更新 更多