如何重复123 1231直到长度目标

时间:2018-12-25 10:31:14

标签: javascript arrays loops for-loop while-loop

如何在str中打印数字并重复直到达到长度目标, 例如:

如果我们有num = 4,而我们打印的str target123

因此newStr =应该为1231,如果num = 6newStr = 123123

newStr.length应该像num

function repeatIt(num) {
  var arr = [],
    markIt = true,
    add = true,
    hastag = true;
  while (arr.length < num) {
    var pushThis = "";
    if (markIt) {
      pushThis = "!";
       markIt = false;
    } else if (add) {
      pushThis = "@";
       add = false;
       hastag = true;
    } else if (hastag) {
      pushThis = "#";
       hastag = false;
       markIt = true;
       add = true;
    };
    arr.push(pushThis)
  };
  return num > 0 ? arr : "invalid input"
};

console.log(repeatIt(3))
// output : ['!','@','#'] 123 

console.log(repeatIt(6));
// output : ['!','@','#','!','@','#'] 123 123

console.log(repeatIt(4))
// output : ['!','@','#','!'] 123 1

console.log(repeatIt(0)) // invalid input

以上是我的示例,这是我的代码,我检查并更改了参数,它与所需的输出匹配,但是我的代码似乎不干净且时间太长,有什么办法可以为此编写更好的代码上面的例子,??

3 个答案:

答案 0 :(得分:1)

您可以使用一个字符数组,然后使用Array.from构造该数组,然后检查i % chars.length以获取正确的字符:

function repeatIt(length) {
  if (length === 0) return "invalid input";
  const chars = ['!', '@', '#'];
  return Array.from(
    { length },
    (_, i) => chars[i % chars.length]
  )
}

console.log(repeatIt(3))
// output : ['!','@','#'] 123 

console.log(repeatIt(6));
// output : ['!','@','#','!','@','#'] 123 123

console.log(repeatIt(4))
// output : ['!','@','#','!'] 123 1

console.log(repeatIt(0)) // invalid input

答案 1 :(得分:1)

您的函数实际上应该有两个参数:原始字符串和目标长度。

它看起来像这样:

function repeatIt(str, num) {
    while (str.length < num) {
        str += str; // double the length
    }
    return str.slice(0, num); // chop off 
}

console.log(repeatIt("!@#", 8));

如果允许您使用内置的.repeat()方法,则:

function repeatIt(str, num) {
    return str.repeat(Math.ceil(num / str.length)).slice(0, num);
}

console.log(repeatIt("!@#", 8));

如果输入和/或输出需要为字符数组,则只需应用.split("")即可将字符串转换为数组,并应用.join("")即可将数组转换为字符串。

答案 2 :(得分:0)

如果我正确理解了您的问题,则可以使用%模运算符来简化此操作,如下所示:

function repeatIt(num) {
  
  if(num <= 0) return;

  // The dictionary and result arrays used to generate result
  const dict = ['!','@','#'];
  const result = [];      
 
  // Iterate over the number range provide
  for(var i = 0; i < num; i++) {
    
    // For each iteration, add item from dict
    // that is current iteration, modulo the length
    // of characters in the dictionary
    result.push( dict[i % dict.length] );
  }
  
  return result;
}

console.log(repeatIt(0));
console.log(repeatIt(3));
console.log(repeatIt(4));
console.log(repeatIt(5));
console.log(repeatIt(10));