Javascript 根据最长的令牌序列对项目列表进行分组

Javascript 根据最长的令牌序列对项目列表进行分组,javascript,algorithm,grouping,categories,Javascript,Algorithm,Grouping,Categories,我有一个项目列表,然后我想使用它们名称中的共同部分对它们进行分类。所以它需要像这样转变: Foo Bar Apple Foo Bar Banana Foo Bar Carrot Lorem Ipsum Car A 1 Hello Lorem Ipsum Car A 2 Hello Lorem Ipsum Car A 3 Hello Lorem Ipsum Car A 4 Hello Lorem Ipsum Car B 1 Hello Lorem Ipsum Car B 2 Hello Lorem

我有一个项目列表,然后我想使用它们名称中的共同部分对它们进行分类。所以它需要像这样转变:

Foo Bar Apple
Foo Bar Banana
Foo Bar Carrot
Lorem Ipsum Car A 1 Hello
Lorem Ipsum Car A 2 Hello
Lorem Ipsum Car A 3 Hello
Lorem Ipsum Car A 4 Hello
Lorem Ipsum Car B 1 Hello
Lorem Ipsum Car B 2 Hello
Lorem Ipsum Car B 3 Hello
Lorem Ipsum Car B 4 Hello
Lorem Ipsum Car C 1 Hello
Lorem Ipsum Car C 2 Hello
Lorem Ipsum Car C 3 Hello
Lorem Ipsum Car C 4 Hello
This is a unique item
为此:

- Foo Bar 
  - Apple
  - Banana
  - Carrot
- Lorem Ipsum Car A
  - 1 Hello
  - 2 Hello
  - 3 Hello
  - 4 Hello
- Lorem Ipsum Car B
  - 1 Hello
  - 2 Hello
  - 3 Hello
  - 4 Hello
- Lorem Ipsum Car C
  - 1 Hello
  - 2 Hello
  - 3 Hello
  - 4 Hello
- 
  - This is a unique item
我很难完成这项任务,这是迄今为止我最好的尝试之一(没有产生我想要的输出):

var-arr=[
{name:“富吧苹果”},
{name:“Foo Bar Banana”},
{name:“Foo Bar Carrot”},
{name:“Lorem Ipsum Car A 1你好”},
{name:“Lorem Ipsum Car A 2你好”},
{name:“Lorem Ipsum Car A 3你好”},
{name:“Lorem Ipsum Car A 4你好”},
{name:“Lorem Ipsum Car B 1你好”},
{name:“Lorem Ipsum Car B 2你好”},
{name:“Lorem Ipsum Car B 3你好”},
{name:“Lorem Ipsum Car B 4你好”},
{name:“Lorem Ipsum Car C 1你好”},
{name:“Lorem Ipsum Car C 2你好”},
{name:“Lorem Ipsum Car C 3你好”},
{name:“Lorem Ipsum Car C 4你好”},
{name:“这是唯一的项”},
];
//按名称排序
arr.sort((a,b)=>(a.name>b.name)?1:-1;
var-tree={};
while(arr.length){
常量firstItem=arr[0];
const tokenizedA=firstItem.name.split(/\s+/);
阵列拼接(0,1);
前一个长度=0;
for(设i=0;ilog(JSON.stringify(tree,0,4))您可以从两个字符串中获取公共部分,并将其用于分组。如果字符串不匹配,则采用下一个元素而不是上一个元素

函数getCommon(a,b){ 变量i=-1, l=数学最小值(a.长度,b.长度); 而(i++

.as控制台包装{最大高度:100%!重要;顶部:0;}
请添加一个想要的结果作为数据结构。@NinaScholz不需要特殊的数据结构,可以是嵌套对象或数组,甚至是一个平面对象数组。我只是很难理解如何得出类别。我个人认为第二种方法很好,你可以第二次通过f树中有十个独生子女。另外,你想要的结果不应该包含有三个子女的Lorem Ipsum Car
A B C
),每个都有
#Hello
子级?或者您希望树的深度仅为2 max?Pepper我只需要类别和项目,不能有子类别。我无法想出一个展平算法。请注意,输入必须排序^^~