问题是一个由 3 部分组成的问题,它要求我创建一个名为 addOne 的函数,该函数将一个数字作为参数并在其中添加一个,然后创建一个名为 minusOne 的函数,该函数接收一个数字参数并从中减去一个。之后,我必须创建一个名为 usePotions 的函数,该函数接受一个字符串作为参数,如果字符串中包含字符“A”,则您需要在“A”之前的数字上使用 addOne 函数(如果可用)。如果字符串中包含字符“B”,则需要在“B”之前的数字上使用subtractOne 函数(如果可用)。您还想从字符串中删除字母,如果可用,只需返回对数字执行的数学运算的字符串。这是我目前所拥有的:
function addOne (num) {
num += 1;
return num
}
function subtractOne(num1) {
num1 -= 1;
return num
}
function usePotions(string) {
let newArray = [];
for (let i = 0; i < string.length; i++) {
if (typeof string[i] === "A" && typeof string[i-1] === "number") {
newArray.push(addOne(string[i-1]));
} else if (typeof string[i] === "B" && typeof string[i-1] === "number") {
newArray.push(subtractOne(string[i-1]));
} else if (typeof string[i] === "number"){
newArray.push(string[i]);
}
}
return newArray.join('');
}
console.log(usePotions("3A78B51"))
*当我尝试检查数组是否正在将值传递给它时,数组仍然是空的,我不知道为什么。感谢您的帮助!
答案 0 :(得分:0)
您的 addOne
函数将不起作用,因为向字符串添加任何内容都会导致 JS 中的字符串。
即'1' + 1 = '11'
。因此,您必须在添加之前将字符串转换为数字。
还有 typeof string[i-1]
将始终返回 string
。您需要一些其他方法来检查字符是否为数字。
这是您的固定代码:
function addOne (num) {
return num * 1 + 1
}
function subtractOne(num) {
return num - 1
}
function usePotions(string) {
let newArray = [];
let digit = /\d/
for (let i = 0; i < string.length; i++) {
if (string[i] === "A" && digit.test(string[i-1])) {
newArray.pop();
newArray.push(addOne(string[i-1]));
} else if (string[i] === "B" && digit.test(string[i-1])) {
newArray.pop();
newArray.push(subtractOne(string[i-1]));
} else if (digit.test(string[i])) {
newArray.push(string[i]);
}
}
return newArray.join('');
}
console.log(usePotions("3A78B51"))
答案 1 :(得分:0)
function convert(str){
let no = parseInt(str);
if(isNaN(no))
return str;
let s = str.replace(no,'');
let finalStr = s.startsWith("A") ? `${no+1}${s}` : `${no-1}${s}`;
return finalStr;
}
console.log(convert("12Bbcd"));//11Abcd
console.log(convert("12Abcd"));//13Abcd