У меня есть начало того, что вам нужно:
const groups = arr => {
const res = [];
arr.forEach(v => {
let current = res
const splits = v.split('.');
splits.forEach(s => {
if (current[s] === undefined) {
current[s] = [];
}
current = current[s];
});
current.push(v);
}
return res;
groups(yourArrayHere);
ввод:
const arr = ['animal', 'animal.mammal', 'animal.mammal.human'];
вывод:
[
'animal': [
0: 'animal',
'animal.mammal': [
0: 'animal.mammal.human'
]
]
]
Редактировать:
Вы также можете использовать оператор Reduction, который тоже неплохо работает :)
const groups = arr => {
return arr.reduce((acc, v) => {
let current = acc
v.split('.').forEach(s => {
if (current[s] === undefined) {
current[s] = [];
}
current = current[s];
});
current.push(v);
return acc;
}, []);
};
groups(theArray);