使用 forEach 循环遍历一系列数字,并将包含整数 1 的任何数字替换为“Beep”

问题描述

我是 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.mapRegExp.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());