Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/430.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在没有循环的情况下获取Javascript对象的所有键_Javascript_Node.js_Azure_Botframework - Fatal编程技术网

如何在没有循环的情况下获取Javascript对象的所有键

如何在没有循环的情况下获取Javascript对象的所有键,javascript,node.js,azure,botframework,Javascript,Node.js,Azure,Botframework,我有一个对象,我希望能够搜索软件的名称。在本例中,我们将使用“AdobeAcrobat” 当我知道我正在搜索的密钥有效时: session.send(SoftwareDict["Adobe Acrobat"]["Adobe Acrobat Pro DC"]); 我遇到的问题是,当我试图使用循环从对象中获取键名并将值存储在“choices”数组中时。我尝试过for循环和forEach方法,但两者都不起作用。当我在Bot框架通道模拟器中脱机运行时,循环工作得非常好。我目前正在Azure门户上运行以

我有一个对象,我希望能够搜索软件的名称。在本例中,我们将使用“AdobeAcrobat”

当我知道我正在搜索的密钥有效时:

session.send(SoftwareDict["Adobe Acrobat"]["Adobe Acrobat Pro DC"]);
我遇到的问题是,当我试图使用循环从对象中获取键名并将值存储在“choices”数组中时。我尝试过for循环和forEach方法,但两者都不起作用。当我在Bot框架通道模拟器中脱机运行时,循环工作得非常好。我目前正在Azure门户上运行以使用实体识别器,因此我需要它在此位置工作

在此Bot框架门户上运行循环是否存在问题。这是我第一次需要在这里使用它们

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 (prop in versions) {
    choices.push(prop);
    session.send(prop);
}
或者正如评论中已经提到的,将返回一个键列表,然后您可以迭代,例如

Object.keys(versions).forEach(...)

JSON.stringify(SoftwareDict).match(/adobeacrobat/i)
非常严肃地说,
Object.keys
返回一个对象的所有键。
Object.keys(obj)
将返回一个数组,其中包含
obj
的所有键,如果您想让我们帮您找出代码中是否有循环错误,然后,您必须向我们展示包含循环的代码,并准确地告诉我们它在哪里停止工作。代码在哪里?仅供参考,
.forEach()
是数组上的方法,而不是普通对象上的方法。而且,如果需要的话,可以使用
Object.keys(obj)
将对象的所有可枚举属性放入数组中。此外,“不起作用”不是一个恰当的描述。到底发生了什么?你得到了什么错误,或者你得到了什么结果?好的,这些看起来都很有用,我会试试Object.keys。谢谢。对象键起作用了。我不知道如何将rep奖励给所有的评论。我很好奇这两个评论中的任何一个都像问题的标题中那样“没有循环”。显然,“没有循环”并不是OP真正想要的。@jfriend00显然也不是,标题并没有真正传达问题的实质(OP不太明白
forEach
只适用于数组)。觉得值得一提的是。在中,它可以说比后者更具可读性。
Object.keys(versions).forEach(...)