Разбить строку на равные части JavaScript

Дана строка любой длины.
Её нужно разбить на равные части и вернуть их в виде массива.
Если в последней части не хватает символов дополнить их точками.

Например в функцию передаётся длина как аргумент - 4 и сама строка.

Input: "lorem ipsum dolor sit amet"
Output: ["lore", "m ip", "sum ", "dolo", "r si", "t am", "et.."]

В последнюю часть попали только 2 буквы, поэтому остаток заполнен точками.


Ответы (2 шт):

Автор решения: Grundy

Может быть несколько подходов для разбиения строки на равные части.

Например:

  1. Дополняем длину строки так, чтобы она без остатка делилась на длину частей
  2. в цикле берем соответствующие подстроки

Для дополнения строки до нужной длины, заполнением недостатка конкретным символом можно воспользоваться методом padEnd

Для получения подстроки, можно воспользоваться методом substring

Количество итераций цикла, соответствует количеству полученных частей.

var str = "lorem ipsum dolor sit amet";

function* chunk(str, len) {
  var padded = str.padEnd(Math.ceil(str.length / len) * len, '.');

  for (var i = 0; i < padded.length / len; i++) {
    yield padded.substring(i * len, (i + 1) * len);
  }

}

console.log([...chunk(str, 4)]);
console.log([...chunk(str, 8)]);

→ Ссылка
Автор решения: renich

Разбиваем по заданной длине части.

const str = "lorem ipsum dolor sit amet";
const length = 5; // длина одной части
const pattern = new RegExp(".{1," + length + "}", "ig");
let res = str.match(pattern).map(item => item.padEnd(length, "."));
console.log(res);

Разбиваем по заданному кол-ву частей.

const str = "lorem ipsum dolor sit amet";
const count = 6; // кол-во частей, которые необходимо получить
const length = Math.ceil(str.length / count);
const pattern = new RegExp(".{1," + length + "}", "ig");
let res = str.match(pattern).map(item => item.padEnd(length, "."));
console.log(res);

→ Ссылка