Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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_Discord_Discord.js - Fatal编程技术网

Javascript 与天气命令混淆,如何修复?

Javascript 与天气命令混淆,如何修复?,javascript,discord,discord.js,Javascript,Discord,Discord.js,我正在做一个,weather命令,我希望它能在摄氏度和华氏度下工作,但我希望我的命令能检测最后一个参数,例如,weather toronto会以摄氏度给我多伦多的天气,当我做,weather toronto f时,它会以华氏度给我天气,但是当我做一些事情,比如,纽约天气预报f``它不会给我华氏温度的天气,这是这部分的代码,天气部分是由天气js npm完成的 if(args[1] == "C" || args[1] == "c"){

我正在做一个
,weather
命令,我希望它能在摄氏度和华氏度下工作,但我希望我的命令能检测最后一个参数,例如
,weather toronto
会以摄氏度给我多伦多的天气,当我做
,weather toronto f
时,它会以华氏度给我天气,但是当我做一些事情,比如,纽约天气预报f``它不会给我华氏温度的天气,这是这部分的代码,天气部分是由天气js npm完成的

        if(args[1] == "C" || args[1] == "c"){
            var Degree = "Celsius"
            var Deg = "C"
        }
        else if(args[1] == "F" || args[1] == "f"){
            var Degree = "Fahrenheit"
            var Deg = "F"
        }
        else{
            var Degree = "Celsius"
            var Deg = "C"
        }
假设您使用的是
,纽约市天气预报f
不起作用的原因是,您的命令行被空格分割,格式为
[cmd][location][degree type]

这将使
new
成为地点,而
york
成为学位类型。这当然是无效的


使用空格解释位置名称的一种方法是将输入除以破折号
-
new york city
,而不是
new york city
),然后使用和重新格式化字符串

如果您希望保留位置中的空间,可以使用此

// const args ...
const Location = args.slice(0, args.length - 1);

// Using Optional chaining (?.) Since a degree argument is optional (node v14+)
const Deg = args?.pop();
const Location = args.slice(0, args.length - 1);
const Deg = args?.pop()?.toUpperCase();

let Degree = '';
if (Deg === 'C' || !Deg) {
   Degree = 'Celsius';
} else {
   Degree = 'Fahrenheit';
}

您的最终代码如下所示

// const args ...
const Location = args.slice(0, args.length - 1);

// Using Optional chaining (?.) Since a degree argument is optional (node v14+)
const Deg = args?.pop();
const Location = args.slice(0, args.length - 1);
const Deg = args?.pop()?.toUpperCase();

let Degree = '';
if (Deg === 'C' || !Deg) {
   Degree = 'Celsius';
} else {
   Degree = 'Fahrenheit';
}
更妙的是,用一个简单的方法来处理这一切


args
是一个给定给命令的参数数组,在大多数命令处理程序中按间距分割。如果您严格要求选择在最后一个索引处,您可以使用:
array[array.length-1]
访问它,而不是像其他编码人员建议的那样,使用某个字符在城市名称的单词之间进行分割,从而使其不那么用户友好

let度;
让deg;
if(args[args.length-1].toLowerCase()='f'){
度=华氏度;
deg='F';
}否则{//请记住,检查最后一个索引是否为'c'是没有必要的,因为我们将它设置为摄氏度。
摄氏度=‘摄氏度’;
度=摄氏度;
}

在《纽约市天气》(weather new york city f)中,“纽约市”有空格,因此被视为多个参数。看看第二个如何有效?你基本上是说,如果城市是3个单词长的话,它才会起作用,不是更少,不是更多。谢谢你的提醒!编辑谢谢你的帮助!