javascript - 在不修改对象的情况下在 javascript 中获取父级
问题描述
我有original
嵌套对象,其中包含巨大的树状结构。这基本上是转换为 JavaScript 对象的 JSON 字符串。
结构就像 -
original = {
type : "table",
children :[
{
type : "cell",
children : [
{
type : "label",
children : []
}
]
}
{
type : "cell",
children : []
}
]
}
我已选择项目作为 -
var select = original.children[1].children[0];
我想要的是得到parent
项目selected
。
这是示例演示 - https://stackblitz.com/edit/angular-v5m9ua
注意:我需要追踪原始对象以找到父对象。我查看了其他答案,但他们提到了如何设计对象结构以获取父对象,但我不想更改原始对象。
解决方案
您可以使用循环创建递归函数for...in
并返回对象类型的最后一个父元素。
const data = {
type: "table",
children: [{
type: "cell",
children: [{
type: "label",
children: []
}]
}, {
type: "cell",
children: []
}]
}
var select = data.children[0].children[0];
function getParent(data, obj, parent = null) {
let result = null;
(function loop(data, obj, parent) {
if (typeof data == 'object' && !Array.isArray(data)) {
parent = data
}
for (let i in data) {
if (select == data[i]) {
result = parent;
break;
}
if (typeof data[i] == 'object') {
loop(data[i], obj, parent)
}
}
})(data, obj, parent)
return result;
}
let parent = getParent(data, select)
console.log(parent)
推荐阅读
- javascript - jQuery按钮单击不激活泛光灯计数器
- java - 为什么 Eclipse 不能从我的 ModuleB 中找到我的 ModuleA
- ios - Xcode 11/iOS 13 本地化问题
- javascript - 覆盖 span 元素的边框样式
- angular - 动画 ng 容器
- python - 将一个 Databricks Notebook 导入另一个错误
- typo3 - TYPO3 selectMultipleSideBySide 按记录类型翻译“可用项目”
- python-3.x - AWS DynamoDB 计数查询结果而不检索
- bash - 从“aws ec2 describe-instances”输出中的方括号中获取值
- php - 如何解决服务器 filezilla 上的联系表单(phpmailer)上的错误?