我有一个以下数组:
['/1', '/1/a', '/1/a/b', '/2', '/2/a', '/2/a/b']
我想编写一个可以返回以下内容的函数:
['/1', '/2']
实际上“/1”表示父级,“/1/a”表示子级。假设我们有以下 json:
[
{
a:{
b: 'b value'
}
}
{
a:{
b: 'b value'
}
}
{
a:{
b: 'b value'
}
}
]
如果数组是例如
['/1/a', '/1/a/b', '/2/a', '/2/a/b']
该函数将返回以下内容:
['/1/a', '/2/a']
我运行 jsonpath 函数,它返回了上面的数组。我想更改从 jsonpath 返回的对象的颜色。我使用 React 在浏览器中显示 json,我只想更改父项的颜色(即 '/1', '/2' )而不是子项的颜色(即 '/1/a', '/1/a/b') 来保存额外的渲染,我该怎么做? 该函数可能类似于;
filter(val => !val.startsWith(parent))
我该怎么做?请帮忙
最佳答案
您可以通过根据模式检查存储的值来检查模式是否存在。
这种方法需要拍拍并检查某个项目是否有多个较长的子项。
最后所有部分都连接在一起。
const
array = ['/1/a/b', '/1', '/1/a', '/1/a/b/3', '/2', '/2/a', '/2/a/b', '/2/a/c/3', '/11/a', '/11/b', '/11'],
shortests = array
.reduce((shortests, string) => {
const
keys = string.slice(1).split('/'),
subset = shortests.filter(t => keys.some((v, i) => v !== t[i]));
if (subset.length !== shortests.length) return [...subset, keys];
if (!shortests.some(t => t.every((v, i) => v === keys[i]))) shortests.push(keys);
return shortests;
}, [])
.map(keys => `/${keys.join('/')}`);
console.log(shortests);
关于javascript - 从数组中删除匹配的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63556204/