【问题标题】:language learning game - how to categorize words in an object语言学习游戏 - 如何对对象中的单词进行分类
【发布时间】:2014-02-03 09:48:05
【问题描述】:

我正在创建一个语言学习游戏,现在我将所有词汇存储在一个 JS 对象中(作为一个概念,稍后我会将它们存储在数据库中)。

words 对象中的单词将在单词库中显示给玩家。从那里,他们可以单击一个单词以将其添加到文本框中。

当他们完成句子时,他们可以提交,这将根据预先写好的句子检查正确的词序。比如:

preWrittenSentence.push("Ni", "Hao", "Wo", "Shi");

var correctOrder = preWrittenSentence.join(' ').toLowerCase();
if ($.trim(input.toLowerCase()) == correctOrder) {
    Good job...

在游戏中,如果玩家完成了一项“任务”,即他们提交了正确的句子,他们就会继续下一个任务。

最初,我通过对象中的“任务”来构造单词。这允许我只将给定任务的适当单词输出到单词库(否则,如果我没有在对象中将它们分开,它会循环遍历对象中的每个单词,即使它与给定句子):

var words = {
    "task1" :
    {
        'Ni'    : 'you',
        'Wo'    : 'I',
    },
    "task2" :
    {
        'Xie Xie' : 'Thanks',
        'Bu' : 'No',
    }
}

这样做的问题是...如果我想在另一个任务中重用一个词,例如Ni,我将不得不在该任务的对象中复制它...当我宁愿重用 @来自task1的987654327@。

所以我想也许我可以将所有单词都集中到一个对象中:

var words = {
    'Ni'    : 'you',
    'Wo'    : 'I',
    'Xie Xie' : 'Thanks',
    'Bu' : 'No'
}

但现在我无法控制我想在词库中显示哪些单词,如果它们都混在一起的话。

所以最后,我想也许我可以通过词性将单词放入对象中:

var words = {
    "pronouns" :
    {
        'Ni'    : 'you',
        'Wo'    : 'I',
    },
    "adjectives" :
    {
        'Hao'   : 'good',
        'Kuai'  : 'fast'    
    }
}

这将防止单词数据库中的单词重复,但仍然不允许我将适当的词汇放入给定任务的单词库中。

所以我的问题是:有没有办法像上面那样安排它(pronounsadjectives 等)并以有效的方式选择我想显示的单词给定任务编号的词库?

谢谢!

【问题讨论】:

  • 您必须解释每个 key 的字符串并运行 sort 函数。我们在这里谈论多少字?
  • @NicholasHazel 数千。但你能解释一下你的意思吗?
  • 我几乎很想将arrayspronounsadjectives 等设为静态adjectives 等,然后通过它们进行组织,然后用它们填充你的字典。

标签: javascript jquery html object


【解决方案1】:

检查此代码并告诉我它是否符合您的要求。

var words = {
    pronouns :
        {
            Ni    : {
                text1    :    'you',
                text2    :    'Ni',
                tasks    :    '#1#2#3#'
            },
            Wo    : {
                text1    :    'I',
                text2    :    'Wo',
                tasks    :    '#3#4#'
            }
        },
    adjectives :
        {
            Hao    : {
                text1    :    'good',
                text2    :    'Hao',
                tasks    :    '#1#2#3#'
            },
            Kuai    : {
                text1    :    'fast',
                text2    :    'Kuai',
                tasks    :    '#2#4#'
            }
        }
};

function getWords(task) {
    var ret = new Array();

    for (var kind in words) {
        for (var word in words[kind]) {
            if (words[kind][word].tasks.match("#"+task+"#")) {
                ret.push(words[kind][word]);
            }
        }
    }
    return ret;
}

$(document).ready(new function(){
    var out = "";
    var arr = getWords(2);
    for (var i = 0; i < arr.length; i++) {
        var word = arr[i];
        out += "[" + word.text1 + "->" + word.text2 + "],";
    }
    alert(out);
});

我决定让你的话更复杂一点,但是...... 当然,分隔符是可配置的;)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多