我有一项在亚马逊Alexa上播放动物声音的技能。
用户:狗的声音是什么样的? Alexa :(树皮) 网友:猫听起来像什么? Alexa :(喵)
等...等
我正在尝试添加一个按顺序循环遍历数组的intent,并播放我在数组中可用的所有动物声音文件:
var animalNoises = {
'bear' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_bear_roar_small_01.mp3'/>"
},
'bird' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_bird_forest_01.mp3'/>"
},
'cat' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_cat_meow_1x_02.mp3'/>"
},
'cow' : {
'noise' : "<audio src='https://s3.amazonaws.com/animalhouse-noises/animal+house+(cow-moo).mp3'/>"
},
'chicken' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_chicken_cluck_01.mp3'/>"
},
'dog' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_dog_med_bark_2x_02.mp3'/>"
},
'elephant' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_elephant_01.mp3'/>"
},
'horse' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_horse_whinny_01.mp3'/>"
},
'lion' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_lion_roar_02.mp3'/>"
},
'pig' : {
'noise' : "<audio src='https://s3.amazonaws.com/animalhouse-noises/animal+house+(pig-snort).mp3'/>"
},
'monkey' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_monkey_chimp_01.mp3'/>"
},
'rat' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_rat_squeak_2x_01.mp3'/>"
},
'raven' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_raven_caw_2x_01.mp3'/>"
},
'rooster' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_rooster_crow_02.mp3'/>"
},
'sheep' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_sheep_bleat_02.mp3'/>"
},
'turkey' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_turkey_gobbling_01.mp3'/>"
},
'wolf' : {
'noise' : "<audio src='https://s3.amazonaws.com/ask-soundlibrary/animals/amzn_sfx_wolf_howl_02.mp3'/>"
}
};
这是我在意图中的代码,但没有任何运气声音文件:
'PlayAllAnimalsIntent' : function () {
speechOutput = '';
for (var i = 0; i < animalNoises.length; i++) {
var animalSounds = animalNoises[animalNoises[i]]['noise'];
speechOutput = animalSounds;
this.emit(":tell", speechOutput);
}
},
答案 0 :(得分:0)
animalNoises.length
为undefined
,因为animalNoises
没有密钥length
。因此i < animalNoises.length
变为i < undfeined
。由于i
首先获得0
的值,因此我们得到0 < undefined
。
由于javascript的类型强制噱头,0 < undefined
的计算结果为false
,循环内的代码块永远不会被执行。
此外,var animalSounds = animalNoises[animalNoises[i]]['noise'];
会导致TypeError,因为animalNoises[animalNoises[i]]
是undefined
,但我们永远不会那么远。
要遍历对象,您需要对象的可迭代表示。 Object.keys(object)
会将对象的所有键都作为数组返回。
Object.keys(animalSounds).forEach(key => {
const sound = animalSounds[key]['noise'];
/* Append sound to speechOutput here */
})
this.emit(":tell", speechOutput);