@fajid

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

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

подаю на вход строку и нужное кол-во строк
foo('asdfghjklqwerty', 3)
на выходе хочу получить либо новые строки, либо массив этих строк
asdfg
hjklq
werty
  • Вопрос задан
  • 223 просмотра
Решения вопроса 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)
  );
}

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

Войдите, чтобы написать ответ

Похожие вопросы
22 нояб. 2024, в 22:26
3500 руб./за проект
22 нояб. 2024, в 21:47
3000 руб./за проект
22 нояб. 2024, в 21:44
50000 руб./за проект