2014-01-15 2 views
2

Я создаю игру для изучения языка и на данный момент храню все слова слова в объекте JS (для концепции, позже я буду хранить их в базе данных).Язык обучения - как классифицировать слова в объекте

В качестве слова с объекта words будет показан игрок в банке слов. Оттуда они могут щелкнуть по слову, чтобы добавить его в текстовое поле.

enter image description here

Когда они завершают предложение, они могут представить, что будет проверять правильный порядок слов против предварительного письменного предложения. Что-то вроде:

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, я бы дублировать его в объекте для выполнения этой задачи ... когда Я предпочел бы просто повторно использовать Ni из задачи1.

Так что я подумал, что я могу просто сваливать все слова в объект как таковой:

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

Но теперь у меня нет никакого способа, чтобы контролировать, какие слова я хочу отображаться в Wordbank, если все они объединены ,

Итак, наконец, я подумал, что я могу поставить слова в объекте по части речи:

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

Это позволит предотвратить дублирование слов в базе данных слов, но до сих пор не позволил бы мне поместить соответствующий vocab в слове bank для данной задачи.

Так что мой вопрос: есть способ организовать его, как один из приведенных выше (pronouns, adjectives и т.д.) и выберите в эффективном способе слова я хотел бы отображаться в слове банки присваивается определенный номер задачи ?

Спасибо!

+0

Вы бы интерпретировать строку каждый 'key' и бега функция «сортировка» за ее пределами. Сколько слов мы говорим здесь? –

+0

@NicholasHazel тысячи. но можете ли вы объяснить, что вы имеете в виду? – Growler

+0

У меня почти возникло бы желание создать статические «массивы» ваших «местоимений», «прилагательных» и т. Д., И просто организовать их через них и заполнить их словарем. –

ответ

0

Проверьте этот код и скажите, подходит ли оно вашим требованиям.

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); 
}); 

я решил положить немного больше сложности ваших слов, но ... Разделители настраиваются, конечно;)

Смежные вопросы