javascript - 从数组中删除匹配的字符串

标签 javascript arrays reactjs

我有一个以下数组:

['/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/

相关文章:

javascript - 数组已排序,但 React 未按排序顺序渲染

javascript - Ajax 响应 xml 页面获取标题元素不起作用

javascript - 哪些脚本可用于修复 IE 中的样式错误和缺点?

javascript - 如何按对象的值对对象数组进行排序

javascript - SetInterval 在闭包内,在 For 循环内,创建了太多间隔,不会停止运行

reactjs - docker-compose 命令 'npm start' 不会自动启动 React 应用程序?

javascript - 重新启动组件上的 Audio() 流已安装

javascript - 将内容放入 <td> 中时,<td> 中的angerlySetInnerHTML 不起作用

javascript - window.open 仅在 IE 中导致错误

javascript - 调整跨域 iframe 高度