【发布时间】:2019-04-23 15:21:57
【问题描述】:
我写了一个简单的函数来访问下面数组中的一些值,并且嵌套在数组中的是多个对象。
我的问题与我的 2 个循环有关。我知道我必须首先遍历数组才能访问 3 个对象,但为什么我必须遍历 3 个对象才能访问这些值?
基本上为什么我不能运行初始 for 循环并通过这样做来访问声音:
animalNoises[i][animal][country]
以上对我来说返回未定义。它与每 3 个动物对象的结构方式有关吗?
感谢您的帮助。我非常感谢堆栈溢出社区的持续帮助。
function petSounds(animal, country) {
let phrase = ''
for (let i = 0; i < animalNoises.length; i++) {
for (let key in animalNoises[i]){
if (animal === key){
let sound = animalNoises[i][key][country];
phrase = animal + 's' + ' in ' + country + ' say ' + sound
}
}
}
return phrase
}
let animalNoises = [
{ 'dog': {
'America' : 'Woof! Woof!',
'Germany' : 'Wau Wau!',
'England' : 'Bow wow!',
'Uruguay' : 'Jua jua!',
'Afrikaans' : 'Blaf!',
'Korea' : 'Mong mong!',
'Iceland' : 'Voff voff!',
'Albania' : 'Ham!',
'Algeria' : 'Ouaf ouaf!'
}
},
{ 'cat': {
'America' : 'Meow',
'Germany' : 'Miauw!',
'England' : 'mew mew',
'Uruguay' : 'Miau Miau!',
'Afrikaans' : 'Purr',
'Korea' : 'Nyaong!',
'Iceland' : 'Kurnau!',
'Albania' : 'Miau',
'Algeria' : 'Miaou!'
}
},
{ 'chicken': {
'America' : 'Cluck cluck',
'Germany' : 'tock tock tock',
'England' : 'Cluck Cluck',
'Uruguay' : 'gut gut gdak',
'Afrikaans' : 'kukeleku',
'Korea' : 'ko-ko-ko',
'Iceland' : 'Chuck-chuck!',
'Albania' : 'Kotkot',
'Algeria' : 'Cotcotcodet'
}
}
];
【问题讨论】:
-
适用于
console.log(petSounds('dog', 'America'));->dogs in America say Woof! Woof!和console.log(petSounds('chicken', 'Algeria'));->chickens in Algeria say Cotcotcodet -
代码看起来没问题。可能是您使用不属于对象键的参数调用它,因此它返回未定义。
-
另外,你明白这样你会在所有循环结束时得到一个返回值。
-
如果把结构改成更合理的
{'dog': {...}, 'cat': {...}, 'chicken': {...}},就可以做到animalSounds[animal][country],零循环。
标签: javascript arrays javascript-objects for-in-loop