как повторить 123 1231 до длины цели - PullRequest
0 голосов
/ 25 декабря 2018

как напечатать число в str и повторять его до заданной длины, например:

, если у нас есть num = 4, а str target, которое мы печатаем, равно 123,

поэтому newStr = должно быть 1231, а если num = 6, то newStr = 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 голосов
/ 25 декабря 2018

Ваша функция должна действительно иметь два аргумента: исходную строку и целевую длину.

Это может выглядеть так:

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(""), чтобы повернутьмассив в строку.

0 голосов
/ 25 декабря 2018

Если я правильно понимаю ваш вопрос, то это можно упростить с помощью оператора % по модулю:

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));
0 голосов
/ 25 декабря 2018

Вы можете использовать массив символов, затем использовать 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
...