选择一个随机的 json 对象

Posted

技术标签:

【中文标题】选择一个随机的 json 对象【英文标题】:Picking a random json object 【发布时间】:2015-11-10 03:01:33 【问题描述】:

我有 json 数据。

[
["Mango","M"],
["Lychee","L"],
["Pineapple","P"],
["Banana","B"]
]

我需要能够随机选择一个数组项目(例如["Pineapple","P"])。如何进行随机选择?

var alphabetNum = "";
$.ajax (
    
    url:"getalphabet.json"
   ).done(function(data) 
        alphabetNum = data;
);

【问题讨论】:

1) 你有数组 2) 数组是整数索引 3) 产生随机数 [0, length) 4) alphabetNum[i] data 是你要随机选择的数组吗? 那不是 JSON 对象。 @IfTrue 它实际上是一个有效的 JSON(第 2 页 ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf) @Audrey 我并不是说它不是有效的 JSON,我说它不是原始帖子所说的 JSON“对象”。我只是想确保如果 OP 不知道有区别,他们可以出去学习数组和对象之间的区别。您可以通过点击 OP 中的“edited [time past] ago”查看编辑前的历史记录。 【参考方案1】:

只需将Math.random() 和数组的长度作为因子。

var array = [
    ["Mango","M"],
    ["Lychee","L"],
    ["Pineapple","P"],
    ["Banana","B"]
];
var randomItem = array[Math.random() * array.length | 0];

// take only the element with index 0
alert(randomItem[0]);

【讨论】:

看起来不错。谢谢 :)。你能解释一下最后一行的| 0吗? short:Math.floor() 的缩写形式。 long:它强制将值设置为整数并按位应用或使用 0。 这个| 0 不是最好的主意,你只是保存了几个字符,这会破坏可读性,这样的陷阱没有充分的理由,Math.floor 对每个人来说都是明确而清晰的。 很久以前我在想(这是教给我的),就可读性而言,捷径是邪恶的。现在,我认为应该在有意义的地方使用该语言的特性。我不认为应该避免不寻常的解决方案,因为我无法(快速)收集有关该功能的信息。只要没有副作用,而且我不能在这里发现一些,我就去。 感谢尼娜的澄清。另外使用您的解决方案,我将如何从这个随机选择中获取第一个值?例如Pineapple

以上是关于选择一个随机的 json 对象的主要内容,如果未能解决你的问题,请参考以下文章

从 JSON 中选择随机对象 [重复]

从 Spark GroupedData 对象中选择随机项

从 JSON 中的多个返回中随机选择一个值

使用随机数组创建映射 json 对象

Json数组方法随机函数数组去重

从 Javascript 对象中选择随机属性