首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >与天气命令混淆,我如何修复它?

与天气命令混淆,我如何修复它?
EN

Stack Overflow用户
提问于 2021-05-06 14:00:57
回答 2查看 82关注 0票数 1

我正在做一个,weather命令,我希望它工作在摄氏,华氏温度,但我希望我的命令能探测到最后一个参数,例如,,weather toronto会给我多伦多的天气以摄氏单位表示,当我做,weather toronto f时,它会给我以fahrenhiet表示的天气,但是当我做类似于天气的事情时,它不会给我以华氏度表示的天气,这里是这个部分的代码,天气部分是由天气完成的-js npm

代码语言:javascript
运行
复制
        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"
        }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-05-06 14:13:32

args是提供给命令的参数数组,由大多数命令处理程序中的间隔分隔。与其让它不像其他程序员所建议的那样对用户友好,而是使用一个特定的字符在城市名称的单词之间进行分割,如果您严格要求所选内容位于最后一个索引处,您可以使用:array[array.length - 1]访问它。

代码语言:javascript
运行
复制
let degree;
let deg;
if (args[args.length - 1].toLowerCase() === 'f') {
  degree = 'Fahrenheit';
  deg = 'F';
} else { // Keep in mind, checking if the last index is 'c' is not necessary, as we'll set it to celsius anyways.
  degree = 'Celsius';
  deg = 'C';
}
票数 1
EN

Stack Overflow用户

发布于 2021-05-06 14:10:41

假设您使用的是参数,那么,weather new york city f不能工作的原因是您的命令行是按空格拆分的,并且具有[cmd] [location] [degree type]格式。

这将使new成为位置,而york将成为度类型。当然是无效的。

一种用空格解释位置名称的方法是,让输入用破折号- (new-york-city而不是new york city)来划分,然后使用String#split()Array#join()重新格式化字符串。

代码语言:javascript
运行
复制
// message.content = ',weather new-york-city f`
// const args ...

console.log(args);
// ['new-york-city', 'f']

args[0] = args[0].split('-').join(' ');
// ['new-york-city'] => 'new york city'

如果您喜欢维护位置中的空格,则可以使用此

代码语言:javascript
运行
复制
// 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();

您的最终代码将类似于下面的

代码语言:javascript
运行
复制
const Location = args.slice(0, args.length - 1);
const Deg = args?.pop()?.toUpperCase();

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

更好的是,用一个三元算子来处理这一切。

代码语言:javascript
运行
复制
const Location = args.slice(0, args.length - 1);
const Deg = args?.pop()?.toUpperCase();
const Degree = Deg === 'C' || !Deg ? 'Celsius' : 'Fahrenheit';
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67419712

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档