• Как разбить строку на определенное количество строк?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    1. получите длину исходной строки
    2. разделите на нужное кол-во строк с округлением в бОльшую сторону
    3. вытаскивайте под-строки из исходной строки в цикле
    Ответ написан
    1 комментарий
  • Как разбить строку на определенное количество строк?

    0xD34F
    @0xD34F Куратор тега JavaScript
    function chunked(str, numChunks) {
      const chunkSize = Math.ceil(str.length / numChunks);
      return Array.from(
        { length: numChunks },
        (n, i) => str.slice(i * chunkSize, (i + 1) * chunkSize)
      );
    }

    или

    function chunked(str, numChunks) {
      return str.match(RegExp(`.{1,${Math.ceil(str.length / numChunks)}}`, 'g'));
    }

    или

    function chunked(str, numChunks) {
      return str.split(RegExp(`(.{${Math.ceil(str.length / numChunks)}})`)).filter(Boolean);
    }


    UPD. В комментариях докладывают:

    неаккуратненько как-то:
    chunked('test', 3) // [ "te", "st", "" ]

    Это поправимо. Наверное.
    const chunked = (str, numChunks) =>
      numChunks <= str.length
        ? Array.from(
            { length: numChunks },
            function(n, i) {
              return str.slice(i * this, i === numChunks - 1 ? str.length : (i + 1) * this);
            },
            str.length / numChunks | 0
          )
        : 'извини, столько непустых кусков нарезать нельзя';

    или

    function chunked(str, numChunks) {
      const chunkSize = str.length / numChunks | 0;
      const numLooseItems = str.length % numChunks;
    
      return Array.from(
        { length: numChunks },
        function(_, i) {
          return str.slice(this(i), this(i + 1));
        },
        i => i * chunkSize + Math.min(i, numLooseItems)
      );
    }

    Ответ написан
    4 комментария