Javascript 解析对象的对象

Javascript 解析对象的对象,javascript,data-structures,Javascript,Data Structures,我想将#currentWordspan设置为悬停在中文单词的英文翻译上方 为此,我将根据单词的类别将其存储在一个对象中: var vocab = { "pronouns" : { 'wǒ' : 'I', 'nǐ' : 'You', }, "nouns" : { 'gǒu' : 'dog' }, "verbs" : { 'bāng' : 'help', 'xún' : 'search', } }) 然后我调用parseHovere

我想将
#currentWord
span设置为悬停在中文单词的英文翻译上方

为此,我将根据单词的类别将其存储在一个对象中:

var vocab = {
"pronouns" :
{
    'wǒ'    : 'I',
    'nǐ'    : 'You',
},
"nouns" : 
{
    'gǒu'   : 'dog'
},
"verbs" : 
{
    'bāng'  : 'help',
    'xún'   : 'search',
}
})

然后我调用
parseHoveredText
将单词发送到
currentWord
span:

$("#currentWord").text(parseHoveredText(word));
parseHoveredText()函数:

function parseHoveredText (word) {
  for (obj in vocab) {
      log(vocab[obj][word]);
      return vocab[obj][word];
  }
  return "";
};
当我将鼠标悬停在“Ni”上时,它会正确地输出英文“You”

控制台输出也正确:
You


但是:悬停在
bang
(在“动词”对象中)上不会输出任何内容:

控制台输出显示:
未定义

奇怪的是:如果我注释掉
//返回vocab[obj][word]
,控制台输出正确的关联英语“Help”,但仍不向
span
显示它

为什么呢


谢谢

您正在迭代整个
vocab
对象,并在第一次迭代中返回,甚至没有检查单词是否在内部对象中

将鼠标悬停在“Ni”上“偶然”起作用,因为第一次迭代中的属性似乎是
名词
。但是,由于“bang”不在
词汇中,名词
,因此得到的是
未定义的

您必须检查该词是否包含在每个类别中,并在找到翻译后返回

for (obj in vocab) {
    if (word in vocab[obj]) {
        return vocab[obj][word];
    }
}

您正在迭代整个
vocab
对象,并在第一次迭代中返回,甚至没有检查单词是否在内部对象中

将鼠标悬停在“Ni”上“偶然”起作用,因为第一次迭代中的属性似乎是
名词
。但是,由于“bang”不在
词汇中,名词
,因此得到的是
未定义的

您必须检查该词是否包含在每个类别中,并在找到翻译后返回

for (obj in vocab) {
    if (word in vocab[obj]) {
        return vocab[obj][word];
    }
}

返回之前,需要检查当前词性中是否存在该元素:

function parseHoveredText (word) {
  for (obj in vocab) {
    if (vocab[obj][word]) {
      log(vocab[obj][word]);
      return vocab[obj][word];
    }
  }
  return "";
};

返回之前,需要检查当前词性中是否存在该元素:

function parseHoveredText (word) {
  for (obj in vocab) {
    if (vocab[obj][word]) {
      log(vocab[obj][word]);
      return vocab[obj][word];
    }
  }
  return "";
};
您需要添加“if”语句。通过vocab obj编写循环代码,但第一步调用return和out。若注释,则返回函数将在所有vocab中循环,但将返回“”

您需要添加“if”语句。通过vocab obj编写循环代码,但第一步调用return和out。若注释,则返回函数将在所有vocab中循环,但将返回“”


@Sergio这是一个不同的问题…@Sergio这是一个不同的问题…快速问题,因为我传入的对话框文本可能是大写(
)或小写(
),而且我的vocab对象只有小写(
),我想确保所有的大小写都被检查过。。。所以我在做
if(word in vocab[obj]| | word.toLowerCase()in vocab[obj]){
但它不起作用…为什么?我不能说,它似乎对我起作用:。也许你想试试
word.tolocarese()
而不是。嗯,这也不起作用…
log(word+,“+word.toLowerCase()+”,“+b[obj][word
输出
Nǐ,Nǐ,未定义的
快速问题,因为我传入的对话框文本可能是大写(
)或小写(
),而且我的vocab对象只有小写
,我想确保所有的大小写都被检查过……所以我正在vocab中执行
if(word in vocab[obj]| word toLowerCase()[obj]){
但它不起作用…为什么?我不能说,它似乎对我起作用:。也许你想试试
word.tolocallowercase()
。嗯,这也不起作用…
log(word+”,“+word.toLowerCase()+”,“+vocab[obj][word code];
输出
NǐNǐNǐ,未定义的