javascript - 在树视图中搜索对象数组并获取扩展的匹配节点
问题描述
我正在尝试创建一个反应搜索树组件,我将为其提供以下格式的数据,用户将在输入框中键入以搜索搜索树中的项目。匹配的项目应展开。下面是数据。
const JSON = [
{
label: "Make",
filters: [
{
label: "Year",
filters: [
{
name: 2011,
value: true
},
{
label: "Month",
filters: [
{
name: "Jan",
value: false
},
{
name: "Mar",
value: true
},
{
name: "Aug",
value: true
},
{
name: "Oct",
value: false
}
]
}
]
},
{
label: "Type",
filters: [
{
name: "Basic",
value: true
},
{
label: "Premium",
filters: [
{
name: "Luxury",
value: true
},
{
name: "Super Luxury",
value: false
}
]
},
{
name: "Sport",
value: false
}
]
}
]
},
{
label: "Year",
filters: [
{
name: 2011,
value: false
},
{
name: 2012,
value: true
},
{
name: 2013,
value: false
},
{
name: 2014,
value: true
},
{
name: 2015,
value: false
},
{
name: 2016,
value: true
},
{
name: 2017,
value: false
}
]
},
];
当用户从输入控件中搜索时,我想过滤树视图并提供新的对象数组,并添加了“isExpanded”和“highlightStr”等属性</p>
searchTree(data) {
let count = 0;
let tierCount = 0;
let isGroup = false;
data.filters.forEach(filter => {
if (filter.filters) {
tierCount = this.searchTree(filter);
//how can i search here ? and add properties
// like isExpanded or highlightStr
} else {
if (filter.value) {
}
}
});
return count;
}
从上面的代码我怎么能搜索输入字符串。我在使用递归时遇到问题。
我需要输出作为具有添加属性的整个对象数组以识别节点并突出显示匹配的文本
解决方案
我不确切知道您想要实现什么,但只是在这棵树中搜索 value: true 并为此分配新属性,您可以执行以下操作:
当更多过滤器可用时,您会更深入,但当没有更多层时,您只需检查 value===true 并分配新属性。
function searchTree(data) {
let count = 0;
let tierCount = 0;
let isGroup = false;
data.filters.forEach(filter => {
if (filter.filters) {
tierCount = this.searchTree(filter);
}
if (filter.value) {
filter.isExpanded = true;
}
});
return count;
}
推荐阅读
- javascript - 使用打字稿解压缩文件
- c++ - String.length() 或 String.size() 返回带有 "\x" (\x5) 的数字
- buildfire - 重复的插件会改变原始的内容
- java - 如何使用 session_id 进行 REST 调用?
- php - 使用php cURL的api调用不返回所有页面
- java - Paths.get - 指定一个平台?
- python - SyntaxError:无效的语法。> def isUF2(buf)
- python - 为什么我从 PyCharm 运行的迁移不会影响我的本地数据库?
- asp.net-core - 来自空白已发布 .net 核心项目的 web.config 错误
- javascript - 使用flask和react,在html中引用js文件时出现404错误