Форматирование строки в вложенном массиве
Нужно реализовать форматирование для вложенного массива ,нужно проверить каждый массив, если во вложенном массиве символов больше чем 16,то нужно разделить этот массив и перенести на новую строку прижав к правой стороне(как на картинке 2 и 3 строка). В целом я попытался реализовать ,но у меня не получается...HELP Я поделил строку ,но не верно и не могу добавить звездочки...
const textArray = [
["Hello", "world"],
["Brad", "came", "to", "dinner", "with", "us"],
["He", "loves", "tacos"]
];
const stringLengthLimit = 16;
const textArrayFlated = textArray.flat();
const strings = [];
let processed = '';
textArrayFlated.map((word) => {
const chunkedString = processed.concat(' ' + word).trim();
if (chunkedString.length < 10) {
processed = chunkedString;
} else {
processed = '';
strings.push(chunkedString);
}
});
console.log(strings);
Вот картинка финального результата как должно быть

Ответы (2 шт):
Автор решения: Igor
→ Ссылка
const textArray = [
["Hello", "world"],
["Brad", "came", "to", "dinner", "with", "us"],
["He", "loves", "tacos"]
];
const stringLengthLimit = 16;
const a = [];
a.push('*'.repeat(stringLengthLimit + 2));
textArray.forEach(s => {
const l = s.join(' ').length;
if (l <= stringLengthLimit) {
a.push('*' + s.join(' ') + ' '.repeat(stringLengthLimit - l) + '*');
} else {
const r = s.reduce((r, i) => {
if ((r + i).length > stringLengthLimit) {
a.push('*' + ' '.repeat(stringLengthLimit - r.length) + r + '*');
return i;
} else {
return r + ' ' + i;
}
}, '');
a.push('*' + ' '.repeat(stringLengthLimit - r.length) + r + '*');
}
});
a.push('*'.repeat(stringLengthLimit + 2));
console.log(a);
Автор решения: vsemozhebuty
→ Ссылка
По-моему, вы зря начали с уплощения массива, так у вас все фразы слепились в одну большую.
Как вариант:
const phrases = [
['Hello', 'world'],
['Brad', 'came', 'to', 'dinner', 'with', 'us'],
['He', 'loves', 'tacos']
];
const limit = 16;
const border = '*'.repeat(limit + 2);
const output = [border];
phrases.forEach((phrase, i) => {
phrase = phrase.join(' ');
if (phrase.length <= limit) {
output.push(`*${phrase.padEnd(16)}*`);
} else {
const lines = phrase
.replace(/(.{1,16}) /, '$1\n')
.split('\n')
.map(line => `*${line.padStart(16)}*`);
output.push(...lines);
}
});
output.push(border);
console.log(output);