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