次のようなことができます。
function getRandomWord(jsonStringListOfWords) {
var words = JSON.parse(jsonListOfWords);
var MAX_LENGTH = Object.keys(words).length;
var wordLength = Math.floor(Math.random() * MAX_LENGTH) + 1;
var wordIndex = Math.floor(Math.random() * words[wordLength].length) + 1;
return words[wordLength][wordIndex];
}
最初に単語の長さをランダムに選択し、次にその長さの単語のリストからそれらの単語の 1 つを選択します。これは、ScottSauyet がコメントで指摘したように、さまざまな長さのすべての単語間で均等に分散されるわけではありません。
長さに関係なく、すべての単語を均等に分配するアルゴリズムの例を次に示します。
function getRandomWordEvenDistribution(jsonStringListOfWords) {
var words = JSON.parse(jsonListOfWords);
var numWords = 0;
for (var x in words) {
numWords += words[x].length;
}
var wordIndex = Math.floor(Math.random() * numWords);
for (var x in words) {
if (wordIndex >= words[x].length) {
wordIndex -= words[x].length;
} else {
return words[x][wordIndex];
}
}
}
実際に JSON をロードする限り、jQuery を使用する場合は$.getJSON()
、サーバーから JSON 文字列を取得するために使用できる という非常に便利なメソッドがあります。