Javascript 在树中查找元素并将其更改';s的父母';属性值
我想通过属性值在树中找到一个元素,然后返回到树的开头,并使用JS将每个元素的父元素的Javascript 在树中查找元素并将其更改';s的父母';属性值,javascript,algorithm,recursion,tree,Javascript,Algorithm,Recursion,Tree,我想通过属性值在树中找到一个元素,然后返回到树的开头,并使用JS将每个元素的父元素的isExpanded属性设置为true 所以我有一个目标: elementsArray = [ { name: 'test_1', isExpanded: false, expandElements: [ { name: 'test_1_1', isExpanded: false, expandElements: [
isExpanded
属性设置为true
所以我有一个目标:
elementsArray = [
{
name: 'test_1',
isExpanded: false,
expandElements: [
{
name: 'test_1_1',
isExpanded: false,
expandElements: [
{
name: 'test_1_1_1'
},
{
name: 'test_1_1_2'
}
]
},
{
name: 'test_1_2',
isExpanded: false,
expandElements: [
{
name: 'test_1_2_1'
},
{
name: 'test_1_2_2'
}
]
}
]
},
{
name: 'test_2',
isExpanded: false,
expandElements: [
{
name: 'test_2_1',
isExpanded: false,
expandElements: [
{
name: 'test_2_1_1'
},
{
name: 'test_2_1_2'
}
]
},
{
name: 'test_2_2',
isExpanded: false,
expandElements: [
{
name: 'test_2_2_1'
},
{
name: 'test_2_2_2'
}
]
}
]
}
]
我想找到元素,它的属性名称为:“test_2_2_1”
,并将每个父元素的isExpanded
属性设置为true
工作原理:
- 调用一个方法
expandParentElements(elementsArray,'test_2_2_1')
更改为:elementsArray
let expandParentElements = (array, searchName) => {
return array.map(item => {
if (item.name === searchName) {
return item
} else if (item.expandElements) {
return expandParentElements(item.expandElements, searchName)
}
})
}
下面是一个函数,用于设置项目路径上的
isExpanded
。项本身(例如,当它有子项时)将不会将isExpanded
设置为true
此函数也不会在调用函数之前清除可能已设置为true
的isExpanded
值
const expandParentElements=(数组,searchName)=>
array&&array.some(item=>item.name==searchName||
expandParentElements(item.expandElements,searchName)&&(item.isExpanded=true)
);
//问题的样本数据
const elementsArray=[{name:'test_1',isExpanded:false,expandElements:[{name:'test_1_1',isExpanded:false,expandElements:[{name:'test_1_1_1'},{name:'test_1_1_2'},{name:'test test u 1_1_1_2'},{false,isexpandelements:[{name:'test name:'test u 1_1_2_2'},{[{name:'test_2_1',isExpanded:false,expandElements:[{name:'test_2_1_1'},{name:'test_2_1'}],{name:'test_2_2',isExpanded:false,expandElements:[{name:'test u 2_2_1'},{name:'test u 2_2'}]}];
expandParentElements(elementsArray,“test_2_2_1”);
console.log(elementsArray);
欢迎来到StackOverflow。如果您能提供一些代码来说明您试图解决问题的方法,那就太好了。@RDev,谢谢您的提示。我已经更新了帖子。
let expandParentElements = (array, searchName) => {
return array.map(item => {
if (item.name === searchName) {
return item
} else if (item.expandElements) {
return expandParentElements(item.expandElements, searchName)
}
})
}
elementsArray.forEach(element => {
let updateParent = element.expandElements.reduce(((prevFound, expandElement) => {
let found = expandElement.expandElements.some(obj => obj.name === "test_1_1_1")
expandElement.isExpanded = found
return prevFound || found
}), false)
element.isExpanded = updateParent
})