Если вы хотите сохранить имеющуюся форму, вы всегда можете использовать Array#find()
, а затем in
проверку оператора, а затем с литералами шаблона вы можете легко создать свою строку.
function petSounds(animal, country) {
const noise = animalNoises.find(obj => animal in obj)[animal][country];
return `${animal}s in ${country} say ${noise}`
}
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'
}
}
];
В противном случае с вашей версией вы зацикливаетесь во время зацикливания, когда вы можете просто проверить существование.
Конечно, есть много способов снять шкуру с кошки, поэтому приведенное выше эквивалентно
function petSounds(animal, country) {
const noise = animalNoises.find(obj => obj.hasOwnProperty(animal))[animal][country];
return `${animal}s in ${country} say ${noise}`
}
Конечно, если вы получаете этот JSON откуда-то, вы можете уменьшить его, а затем связать ключи и значения в суперобъекте (используя Array#reduce()
и Object.entries()
)
animalNoises = animalNoise.reduce((acc, obj) => {
Object.entries(obj).forEach(([key, value]) => {
acc[key] = value;
});
return acc;
},
{}
)
function petSounds(animal, country) {
return `${animal}s in ${country} say ${animalNoises[animal][country]}`;
}
Если вы хотите узнать больше о классных вещах, которые вы можете делать с массивами, вам следует проверить MDN для массивов JavaScript
Оператор in
являетсядействительно полезный способ сделать Object#hasOwnProperty()
короче
И, как всегда, гораздо больше информации о JavaScript можно найти на MDN
Некоторые дополнительные развлечения с Сеструктуризация объекта просто еще один способ упорядочить вещи:
function petSounds(animal, country) {
const { [animal]: { [country]: noise } } = animalNoises.find(obj => animal in obj);
return `${animal}s in ${country} say ${noise}`
}