用这个撞墙,我想我会把它贴在这里,以防有好心人遇到类似的。我有一些看起来像这样的数据:
const input = [
{
value: 'Miss1',
children: [
{ value: 'Miss2' },
{ value: 'Hit1', children: [ { value: 'Miss3' } ] }
]
},
{
value: 'Miss4',
children: [
{ value: 'Miss5' },
{ value: 'Miss6', children: [ { value: 'Hit2' } ] }
]
},
{
value: 'Miss7',
children: [
{ value: 'Miss8' },
{ value: 'Miss9', children: [ { value: 'Miss10' } ] }
]
},
{
value: 'Hit3',
children: [
{ value: 'Miss11' },
{ value: 'Miss12', children: [ { value: 'Miss13' } ] }
]
},
{
value: 'Miss14',
children: [
{ value: 'Hit4' },
{ value: 'Miss15', children: [ { value: 'Miss16' } ] }
]
},
];
我不知道在运行时层次结构有多深,即有多少级别的对象会有一个子数组。我已经稍微简化了这个例子,我实际上需要将 value 属性与一组搜索词进行匹配。让我们暂时假设我匹配 where value.includes('Hit')
。
我需要一个返回新数组的函数,例如:
每个没有子级或子级层次结构中没有匹配项的非匹配对象不应存在于输出对象中
每个具有包含匹配对象的后代的对象都应该保留
匹配对象的所有后代都应该保留
在这种情况下,我正在考虑将“匹配对象”作为value
包含字符串的属性的对象Hit
,反之亦然。
输出应如下所示:
const expected = [
{
value: 'Miss1',
children: [
{ value: 'Hit1', children: [ { value: 'Miss3' } ] }
]
},
{
value: 'Miss4',
children: [
{ value: 'Miss6', children: [ { value: 'Hit2' } ] }
]
},
{
value: 'Hit3',
children: [
{ value: 'Miss11' },
{ value: 'Miss12', children: [ { value: 'Miss13' } ] }
]
},
{
value: 'Miss14',
children: [
{ value: 'Hit4' },
]
}
];
非常感谢花时间阅读本文的任何人,如果我先到达那里,将发布我的解决方案。