У меня есть строка, которая может быть любой длины.
aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsssttt
Я хочу иметь возможность получить все группы персонажей из него. Количество групп в строке не ограничено.
Группа состоит из 3 столбцов и 4 строк. Так что, если я разделю эту строку на группы, это будет выглядеть так ...
aaa bbb ccc ddd eee
fff ggg hhh iii jjj
kkk lll mmm nnn ooo
ppp qqq rrr sss ttt
Итак, первая группа персонажей будет ...
aaa fff kkk ppp
Во-вторых ...
bbb ggg lll qqq
3 ответа
Вы можете сделать это в следующих шагах:
- Сначала используйте RegEx и
match()
, чтобы получить одномерный массив строк, таких как["aaa","bbb",...]
. - Затем разделите длину этого массива на число групп, которые вы хотите создать, т.е. в этом случае
4
. Давайте назовем этоx
- Затем используйте
reduce()
метод в массиве. И используйте[]
в качестве начального значения аккумулятора. - Теперь элемент проверяется, если индекс текущего элемента модуля
x
, тоpush()
его значение. В противном случае создайте пустой массив в этом месте.
let str = 'aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsssttt'
let groups = str.match(/(.)\1+/g);
let x = groups.length/4;
let res = groups.reduce((ac,a,i) => {
if(!ac[i%x]) ac[i%x] = [];
ac[i%x].push(a);
return ac;
},[]);
console.log(res)
Вы можете использовать Regex
, чтобы разбить строку на маленькие массивы. затем map()
и slice()
большой массив на группы.
const str = 'aaabbbcccdddeeefffggghhhiiijjjkkklllmmmnnnooopppqqqrrrsssttt'
const lettersArr = str.match(/([a-z])\1*/g)
var chunkSize = 4;
const groups = lettersArr.map( function(e,i){
return i%chunkSize===0 ? lettersArr.slice(i,i+chunkSize) : null;
}).filter((e) =>e);
console.log(groups);
Формула для получения индекса конкретной группы для данной пары x, y:
index = (x + (y * 5))*3;
5 Потому что у вас есть 5 столбцов. 3, потому что каждый столбец имеет ширину 3 символа.
Таким образом, начальный индекс столбца будет вашим индексом столбца × 3.
Затем вы захотите выяснить, насколько высока ваша матрица. Если вам гарантированы полные строки, то вы можете сказать, что высота равна длине строки ÷ 15. Это потому, что каждая строка имеет ширину 15 символов.
Таким образом, чтобы получить последний индекс вашего столбца, который вам нужен (индекс столбца + ((высота-1) × 5)) × 3).
(высота - 1), потому что у 0 проиндексировано.
Теперь у вас есть начальные и конечные индексы. Следующим шагом будет цикл по строке по ширине строки от начального индекса до конечного индекса, захват 3 символов по ходу и добавление 3 символов в массив.
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript / JS) и его различных диалектах / реализациях (кроме ActionScript). Включите все соответствующие теги в свой вопрос; например, [node.js], [jquery], [json] и т. д.