Как перенести строку в двумерном массиве
Нужно вывести на экран двумерный массив с разным количеством символов в каждой строке, если количество символов в строке больше 20, перенести остаток на новую строку. Допустим
[
[Здравствуйте, меня],
[зовут, Иван, Иванович, Иванов]
]
Чтобы слово "Иванов" уже было на новой строке
Ответы (1 шт):
Автор решения: UModeL
→ Ссылка
Не совсем понятно, как и куда нужно выводить - массив в консоль или элементы на экран, поэтому кода чуть больше. Но, похоже, что нужен был такой вариант:
// Может быть словарный массив практически любой структуры...
let aArrayWords = [
['Здравствуйте', 'меня'],
['зовут', 'Иван', 'Иванович', 'Иванов'], '-', 'бригадир'
];
// ... а может быть простая строка
let aTextString = 'Здравствуйте меня зовут Иван Иванович Иванов - бригадир';
/* Собственно, сама функция */
function fArraysBy20Chars(aSource) {
let nInd = 0, aTmp = [[]];
if (typeof aSource === 'string') { aSource = aSource.split(' '); }
aSource.flat(10).reduce((nLen, sWord) => {
if (nLen + sWord.length > 20) {
aTmp.push([]);
aTmp[++nInd].push(sWord);
return sWord.length;
} else {
aTmp[nInd].push(sWord);
return nLen + sWord.length;
}
}, 0);
return aTmp;
}
console.log( fArraysBy20Chars(aArrayWords) );
console.log( fArraysBy20Chars(aTextString) );
/* Вывод на экран */
function fArraysToScreen(aSource) {
aSource.forEach(aWords => document.body.insertAdjacentHTML('beforeend', `<span style="box-shadow: inset 0 0 2px red;">${aWords.join(' ')}</span><br>`));
}
fArraysToScreen( fArraysBy20Chars(aArrayWords) );