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