1

我想将#currentWordspan 设置为悬停在中文单词的英文翻译上。

为此,我将基于它们的类别的单词存储在一个对象中:

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

};

然后我打电话parseHoveredText把这个词发送到currentWord跨度:

$("#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(在“动词”对象中)不输出任何内容:

在此处输入图像描述

控制台输出显示:Undefined

奇怪的是:如果我注释掉//return vocab[obj][word];,控制台会输出正确的关联英文“Help”,但仍然不会显示给span...

这是为什么?

谢谢!

4

3 回答 3

4

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

将鼠标悬停在“Ni”上“偶然”起作用,因为第一次迭代中的属性似乎是nouns. 但由于“砰”不在vocab.nouns,你得到undefined

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

for (obj in vocab) {
    if (word in vocab[obj]) {
        return vocab[obj][word];
    }
}
于 2013-08-30T19:08:38.043 回答
1

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

function parseHoveredText (word) {
  for (obj in vocab) {
    if (vocab[obj][word]) {
      log(vocab[obj][word]);
      return vocab[obj][word];
    }
  }
  return "";
};
于 2013-08-30T19:09:47.197 回答
0

您需要添加“if”语句。您通过 vocab obj 进行代码循环,但在第一步调用返回和输出。如果您评论返回函数将遍历所有词汇但将返回“”

function parseHoveredText (word) {
  for (obj in vocab) {
     var result = log(vocab[obj][word]);
     if(result)
     {
        log(result);
        return result;
     }
  }
 return "";
};
于 2013-08-30T19:13:29.107 回答