【问题标题】:Javascript skipping for loopJavascript跳过循环
【发布时间】:2020-07-31 20:27:51
【问题描述】:

我正在使用 JS 和 inquirer 编写 CLI 应用程序。从下面的代码中,我希望从两个 for 循环中得到一些 console.log() 。但是,即使 checkChoicesanswers 内部都有值,也没有 console.log。

JS

view(){
        let checkChoices = [];
        for(let i = 0; i < this.list.length; i++){
            checkChoices.push(this.list[i].text);
        }

        let viewList = [
            {
                type: 'checkbox',
                name: 'command',
                message: 'Your Checklist',
                choices: checkChoices
            }
        ]

        console.log(checkChoices.length);
        inquirer.prompt(viewList).then((answers) => {
            for(let i = 0; i < answers.length; i++){
                let answer = answers[i];
                console.log("answer", answer)
                for(let j = 0; j < checkChoices.length; j++){
                    console.log("choice", checkChoices[j])
                    if(answer == checkChoices[j]){
                        this.list[j].complete = true;
                    }
                }
            }

            console.log(this.list);
            // this.ask();
        })
    }
  };

【问题讨论】:

  • 在您的第一个 for 之前放置一个控制台日志,并验证 then 的成功部分是否正在发生
  • @Taplar 我将 console.log 放在第一个 for 循环之前,它的打印效果非常好。
  • 好吧,如果你 console.log(answers) 它看起来像什么?
  • @Taplar 看起来像这样:{ command: [ 'hello' ] }
  • 好的,这是一个对象。对象没有长度。您想为数组使用answers.command

标签: javascript arrays command-line-interface inquirer


【解决方案1】:

通过 cmets,发现 answers 是一个对象,而不是一个数组。对象本身没有length 属性。

由于该对象具有 command 的单个属性和一个数组的值,因此假设逻辑应该循环遍历 answers.command,而不是尝试在 answers 对象上循环。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 2020-08-08
    • 2019-03-05
    • 2017-04-07
    • 1970-01-01
    相关资源
    最近更新 更多