【问题标题】:Finding The location of items in a number array inside a string JavaScript在字符串 JavaScript 中查找数字数组中项目的位置
【发布时间】:2020-10-04 11:15:50
【问题描述】:

我正在开发一个带有加法计算器的不和谐聊天机器人....我目前正在尝试查找 .indexOf 第一次出现在字符串中的数字...例如:!add 1 + 1将是添加 1 和 1 的命令...我有一个包含所有单个数字的数组,例如:

const singleNumbers = [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
];

当我得到字符串时,我正在使用

for (const num of singleNumbers){
const num1 = msg.content.indexOf(num,);
const add = '+';
const locationOfAdd = msg.content.indexOf(add,);
const num2 = msg.content.indexOf(num,locationOfAdd);
const add1 = msg.content.slice(num1,) * 1;
const add2 = msg.content.slice(num2,) * 1;
msg.reply(add1 + add2);
}

当我运行这个...由于某种原因它只会使用数组的第一个数字所以我在 !add 1 + 1 中使用的数字必须以 0 开头...所以 !add 01 + 01 其中数学很好...但是为简单起见,我如何使它能够以数组中的任何数字而不是第一个数字开头...如果您不知道 discord.js,

msg.content

是返回的字符串,所以如果我输入聊天... 嘿,伙计们,这是怎么回事? 它将作为字符串返回(“嘿,伙计们,发生了什么事?”)...... 总而言之......我想知道如何让我在 for of 循环中声明的 const num 检查其数组中的所有数字,而不仅仅是我的案例 0 中的第一个。

【问题讨论】:

    标签: javascript discord.js


    【解决方案1】:

    如果您只想查找第一个数字的索引str.search(/[0-9]/)str.match/[0-9]/).index

    使用regex提取数字,并减少添加它们:

    匹配:字符串以 !add 开头,至少一个空格,至少一个数字作为捕获组,可选空格和一个 + 号,另一系列数字作为捕获组。
    您会得到一个具有 [完全匹配,数字组 1,数字组 2] 的数组。我切掉完整匹配,然后使用 reduce to (+x 将字符串转换为数字;您也可以使用 Number(x)) 将每个数字相加并汇总。

    const sum = msg.content.match(/^!add\s+(\d+)\s*\+\s*(\d+)/).slice(1).reduce((sum,x)=>+x+sum,0)
    

    注意:\d 与 [0-9] 相同

    JavaScript.info RegExp tutorial

    【讨论】:

    • 谢谢...我会研究一下,我是 Javascript 领域及其库的新手,所以这需要一点时间来学习,但我会研究一下...谢谢供参考!!!
    • 如果你想用 indexOf 和一个匹配数组来做,你必须遍历数组中的所有元素并为每个元素使用 indexOf,或者遍历所有字符并搜索匹配的数组
    • 我将如何准确地遍历每个人?
    • for (const char of [...str]) doStuffWithCharacter(char) 使用扩展运算符迭代字符
    • 在我的示例中我是否还没有使用 for of 循环做到这一点?
    猜你喜欢
    • 2016-06-10
    • 1970-01-01
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多