我必须遍历一个大数据集来收集 javascript 中节点的最终子元素。
我需要以在子详细信息中找到的分支代码数组结束。 这是我试图获得的输出:
[1000, 1201, 1202, 2101, 3101, 3201]
{
"TITLE": {
"FirstLevel": {
"Details": {
"Code": "01",
},
"SecondLevel": [
{
"Details": {
"Description": "{desc}",
},
"ThirdLevel": {
"Details": {
"Code": "01",
},
"FourthLevel": [
{
"Details": {
"Code": "11",
},
"Branch": {
"Details": {
"Code": "1000",
}
}
},
{
"Details": {
"Code": "12",
},
"Branch": [
{
"Details": {
"Code": "1201",
}
},
{
"Details": {
"Code": "1202",
}
}
]
}
]
}
},
{
"Details": {
"Code": "100",
},
"ThirdLevel": [
{
"Details": {
"Code": "02",
},
"FourthLevel": {
"Details": {
"Code": "21"
},
"Branch": {
"Details": {
"Code": "2101",
}
}
}
},
{
"Details": {
"Code": "03",
},
"FourthLevel": [
{
"Details": {
"Code": "31",
},
"Branch": {
"Details": {
"Code": "3101",
}
}
},
{
"Details": {
"Code": "32",
},
"Branch": {
"Details": {
"Code": "3201",
}
}
}
]
}
]
}
]
}
}
}
我查看了更多基本问题的答案并尝试调整解决方案。
一个这样的解决方案接受传递的 id,并将根据 id 更新名称。我想我可以在这里使用类似的 map 实现。存在一个问题,因为该数组不仅有“子节点”来表示子节点的位置。
function update(object, passedId) {
object.children.map((element, index) => {
if (element.id === passedId) {
console.log(index)
object.children[index].name = "New Name"
}
if (element.children != null) { // condition for checking Nesting
update(element, passedId)
}
})
console.log(object.children)
}
update(obj, "Branch");
接下来我尝试了一种更简单的方法
function getSubItem(obj) {
for (item in obj) {
for (subItem in obj[item]) {
for (subsubItem in obj[subItem]){
console.log(obj[item][subItem][subsubItem]);
}
}
}
}
getSubItem(obj)
等等,在sub item之后的sub之后添加sub,但是那种嵌套的for循环看起来非常不稳定,而且由于分支可以嵌套在不同的区域,所以它看起来也不可靠。我在这里错过了一个简单的解决方案吗?
最佳答案
类似于:
function update (data, passedId, acc = []) {
if (!_.isObject(data)) {
return acc;
}
return _.reduce(_.values(data), (result, item) => {
result = _.chain(item)
.get(passedId)
.thru(val => [val])
.flatten()
.compact()
.map('Details.Code')
.thru(vals => _.concat(result, vals))
.value();
return update(item, passedId, result);
}, acc);
}
const res = update(data, 'Branch');
关于javascript - 如何遍历嵌套数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48582631/