我有一个对象,我希望能够搜索软件的名称。对于本示例,我们将使用“Adobe Acrobat”。
const SoftwareDict {
"Actuate": {
"Standard": "Retire",
},
"Adobe Acrobat": {
"Adobe Acrobat Pro DC": "Mainstream",
"Adobe Acrobat Professional 7.0.8": "Retire",
"Adobe Acrobat Professional 9.0.0":"Retire",
"Adobe Acrobat Professional X":"Retire",
"Adobe Acrobat Professional XI":"Contain",
"Adobe Acrobat Reader 7.0.8":"Retire",
"Adobe Acrobat Reader 9.0.0":"Retire",
"Adobe Acrobat Reader DC":"Mainstream",
"Adobe Acrobat Reader X":"Retire",
"Adobe Acrobat Reader XI":"Contain",
},
};
当我知道我正在寻找的密钥时,它可以工作:
session.send(SoftwareDict["Adobe Acrobat"]["Adobe Acrobat Pro DC"]);
我遇到的问题是当我尝试使用循环从对象中获取键名并将值存储在“选择”数组中时。我尝试了 for 循环和 forEach 方法,但都没有奏效。当我在 Bot Framework Channel Emulator 中离线运行时,循环运行完美。我目前正在 Azure 门户上运行以使用实体识别器,因此我需要它在此位置工作。
在此 Bot Framework 门户上运行循环是否存在问题。这是我第一次需要在这里使用它们。
bot.dialog('LifecycleWaterfallDialog', function (session, args) {
//Match Lifecycle to correct software using waterfall
//Find Software Name
var choices = [];
session.send("Started");
var softwareEntity = builder.EntityRecognizer.findEntity(args.intent.entities, 'Software');
//Get List of Versions for that software
if (softwareEntity) {
session.send(SoftwareDict["Adobe Acrobat"]["Adobe Acrobat Pro DC"]); //This works & returns "Mainstream"
var versions = SoftwareDict["Adobe Acrobat"];
versions.forEach(function(item){
choices.push(item);
session.send(item); //DOES NOT WORK
});
session.send(choices[0]); //DOES NOT WORK
//Outputs
session.send(SoftwareDict[softwareEntity.entity][choices[0]]); //testing first software version
session.endDialog();
} else {
session.send("sorry");
session.endDialog();
}
}).triggerAction({
matches: 'LifecycleStatus'
});
for..in将为您枚举对象属性
for (prop in versions) {
choices.push(prop);
session.send(prop);
}
或者正如评论中已经提到的那样 - Object.keys将返回一个键列表,然后您可以迭代例如
Object.keys(versions).forEach(...)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句