问题描述
我是 javaScript 的新手,在循环和编写函数方面有点挣扎。我试图提出一个循环遍历我的 rangeArray 的函数,其中用户输入的数字是数组的末尾,并且每个包含 1 的整数都被替换为“Beep”,直到用户输入的数字。例如:[ 0,"哔",2,3,4,5,6,7,8,9,12 ]。 12 和 2 将不同,因为稍后我打算添加一个例外,如果一个数字包含任何整数 2,它将取代“Beep”并将其替换为“Boop”。有谁知道这个函数是如何编写的?到目前为止,我已经尝试编写 .includes 甚至使用 splice,但到目前为止我只能替换数字 1 而没有其他内容。帮助将不胜感激!谢谢:)
这是我目前的代码:
function convertToNumber(input) {
let parsedInput = parseInt(input);
console.log(input);
if (!isNaN(parsedInput)) {
return parsedInput;
} else {
return false;
}
}
function rangeOfNumbers(start,end) {
let rangeArray = [];
for (let i = start; i <= end; i++) {
rangeArray.push(i + " ");
}
if (rangeArray); {
rangeArray.forEach (function (number) {
rangeArray.splice(1,'1',"Beep");
}); return rangeArray;
};
}
console.log(rangeOfNumbers(0,12));
解决方法
要创建新数组,请使用 Array.prototype.map 和 RegExp.prototype.test 将整数转换为字符串并测试是否包含特定值:
const beepify = arr => arr.map(v => (
/2/.test(v) ? "Boop" :
/1/.test(v) ? "Beep" :
v));
console.log(beepify([0,1,2,3,4,5,6,7,8,9,10,11,12]));
另请阅读关于 Ternary Operator 的内容,它根据需要以替代方式在上面使用。
,您可以使用 Array#map
。
function rangeOfNumbers(start,end) {
let rangeArray = [];
for (let i = start; i <= end; i++) {
rangeArray.push(i + "");
}
return rangeArray.map(x => x.includes("2") ? "Boop" : x.includes("1") ? "Beep" : x);
}
console.log(rangeOfNumbers(0,12).join());
Array.from
也可以使用。
function rangeOfNumbers(start,end) {
return Array.from({length:end-start+1},(_,i)=>(i+start+"").includes("1") ? "Beep": i + start);
}
console.log(rangeOfNumbers(0,12).join());