使用Javascript从字典对象返回随机单词
我正在创建一个日文文本游戏,在这个游戏中,电脑给出一个单词,用户必须给出一个单词,第一个字符与电脑单词的最后一个字符匹配,反之亦然 我遇到的问题是如何从单词词典中只返回一个随机单词,并让它以确定的字符开头。在这种情况下あ 词典的结构如下:使用Javascript从字典对象返回随机单词,javascript,object,random,dictionary,javascript-objects,Javascript,Object,Random,Dictionary,Javascript Objects,我正在创建一个日文文本游戏,在这个游戏中,电脑给出一个单词,用户必须给出一个单词,第一个字符与电脑单词的最后一个字符匹配,反之亦然 我遇到的问题是如何从单词词典中只返回一个随机单词,并让它以确定的字符开头。在这种情况下あ 词典的结构如下: var dictionary = { "あ": { "あひる": { meaning: "Duck", kanji: "家鴨", sentenceJP: "アヒルに
var dictionary = {
"あ": {
"あひる": {
meaning: "Duck",
kanji: "家鴨",
sentenceJP: "アヒルに似てるの。",
sentenceEN: "It looks like a duck."
},
"あなた": {
meaning: "You",
kanji: "貴方",
sentenceJP: "あなたのお名前は?",
sentenceEN: "What's your name?"
}
}
}
我检查用户的单词是否有效的方法是
"あひる" in Dictionary["あ"]
//true
我可以把Dictionary[”中的所有键组成一个数组吗あ"]代码>然后执行如下操作
var あWords = Object.keys(dictionary["あ"]);
var randomWord = あWords[Math.floor(Math.random() * あWords.length))];
下面是一些获取随机子对象的代码,以及获取父对象是确定字符串的子对象的代码
你可以先得到数组的长度,然后在这些数字内随机化。正如你所做的;)我不想返回属性,而是返回实际的子关键字名称。正如我在OP中所展示的,单词object还有其他属性,比如意义和例句。啊,好的,它已经在prop变量中了。看看修改后的Fiddle-
var myObject = {
"Key1": {
"SubKey1": {
property: "Key1SubKey1"
},
"SubKey2": {
property: "Key1SubKey2"
}
},
"Key2": {
"SubKey1": {
property: "Key2SubKey1"
},
"SubKey2": {
property: "Key2SubKey2"
}
}
}
function getRandomSubObjectStartsWith(myObject, startsWith) {
var count = 0;
var obj = myObject[startsWith];
for (var prop in obj) {
// important check that this is objects own property
// not from prototype prop inherited
if (obj.hasOwnProperty(prop)) {
count++;
}
}
var random = Math.floor(Math.random() * (count));
count = 0;
for (var prop in obj) {
// important check that this is objects own property
// not from prototype prop inherited
if (obj.hasOwnProperty(prop)) {
if (count == random) {
return obj[prop];
}
count++;
}
}
}
function getRandomSubObject(myObject) {
var count = 0;
for (var key in myObject) {
var obj = myObject[key];
for (var prop in obj) {
// important check that this is objects own property
// not from prototype prop inherited
if (obj.hasOwnProperty(prop)) {
count++;
}
}
}
var random = Math.floor(Math.random() * (count));
count = 0;
for (var key in myObject) {
var obj = myObject[key];
for (var prop in obj) {
// important check that this is objects own property
// not from prototype prop inherited
if (obj.hasOwnProperty(prop)) {
if (count == random) {
return obj[prop];
}
count++;
}
}
}
}
alert("Starts with 'Key2' random -- " + getRandomSubObjectStartsWith(myObject, "Key2").property);
alert("Random -- " + getRandomSubObject(myObject).property);