Javascript对象获取上面的值

Javascript对象获取上面的值,javascript,javascript-objects,Javascript,Javascript Objects,我有一个这样的物体: var structure = { "root":{ "name":"Main Level", nodes:{ "node1":{ "label":"Node 1" }, "node2":{ "label":"Node 2", "selected": tru

我有一个这样的物体:

    var structure = {
    "root":{
        "name":"Main Level",
        nodes:{
            "node1":{
                "label":"Node 1"  
            },
            "node2":{
                "label":"Node 2",
                "selected": true
            },
            "node3":{
                "label":"Node 3"  
            }
        }
    }
}

在javascript中,如何在对象中搜索“selected:true”,并获取其上方的标签值,即要使用for循环的“Node 2”

var nodes = structure.roots.nodes;
var nodeYouWant;
for (var obj in nodes){
   if (nodes[obj].selected == true){
      nodeYouWant = obj;  // Now "node2"
   }
}

您希望使用for循环

var nodes = structure.roots.nodes;
var nodeYouWant;
for (var obj in nodes){
   if (nodes[obj].selected == true){
      nodeYouWant = obj;  // Now "node2"
   }
}

您可以循环遍历
结构.root.nodes
(您可以使用
对象.keys
)的键,并检查该键处的节点对象是否已选中。在本演示中,我只记录了所选的
节点.label

var结构={
“根”:{
“名称”:“主要级别”,
节点:{
“节点1”:{
“标签”:“节点1”
},
“节点2”:{
“标签”:“节点2”,
“选定”:真
},
“节点3”:{
“标签”:“节点3”
}
}
}
}
var节点=structure.root.nodes,
键=对象。键(节点)
对于(变量i=0;i}
您可以循环遍历
结构.root.nodes
(可以使用
对象.keys
)的键,并检查该键处的节点对象是否已选中。在本演示中,我只记录了所选的
节点.label

var结构={
“根”:{
“名称”:“主要级别”,
节点:{
“节点1”:{
“标签”:“节点1”
},
“节点2”:{
“标签”:“节点2”,
“选定”:真
},
“节点3”:{
“标签”:“节点3”
}
}
}
}
var节点=structure.root.nodes,
键=对象。键(节点)
对于(变量i=0;i}
这将递归遍历对象以查找选定值,如果找到,则返回键名

const结构={
“根”:{
“名称”:“主要级别”,
节点:{
“节点1”:{
“标签”:“节点1”
},
“节点2”:{
“标签”:“节点2”,
“选定”:真
},
“节点3”:{
“标签”:“节点3”
}
}
}
}
const findSelected=(obj,ret='')=>{
用于(输入obj){
如果(obj[键]。选中){
返回键
}
if(obj[key]。构造函数===对象){
ret=findSelected(对象[键])
如果(ret)返回ret
}
}
}
console.log(
findSelected(结构)

)
这将递归遍历对象以查找选定值,如果找到,则返回键名

const结构={
“根”:{
“名称”:“主要级别”,
节点:{
“节点1”:{
“标签”:“节点1”
},
“节点2”:{
“标签”:“节点2”,
“选定”:真
},
“节点3”:{
“标签”:“节点3”
}
}
}
}
const findSelected=(obj,ret='')=>{
用于(输入obj){
如果(obj[键]。选中){
返回键
}
if(obj[key]。构造函数===对象){
ret=findSelected(对象[键])
如果(ret)返回ret
}
}
}
console.log(
findSelected(结构)

)
也许你可以试试下面的方法

var structure = {
    "root": {
        "name": "Main Level",
        nodes: {
            "node1": {
                "label": "Node 1"
            },
            "node2": {
                "label": "Node 2",
                "selected": true
            },
            "node3": {
                "label": "Node 3"
            }
        }
    }
};
let nodes = structure.root.nodes;
Object.keys(nodes).forEach(key => {
    if(nodes[key].selected === true){
        //do something like below
        //console.log(nodes[key].label);
    }
});

参考资料:

也许你可以试试下面的方法

var structure = {
    "root": {
        "name": "Main Level",
        nodes: {
            "node1": {
                "label": "Node 1"
            },
            "node2": {
                "label": "Node 2",
                "selected": true
            },
            "node3": {
                "label": "Node 3"
            }
        }
    }
};
let nodes = structure.root.nodes;
Object.keys(nodes).forEach(key => {
    if(nodes[key].selected === true){
        //do something like below
        //console.log(nodes[key].label);
    }
});

参考资料:

处理对象文字时不需要
hasOwnProperty
。处理对象文字时不需要
hasOwnProperty
。您需要测试
节点[obj]。选中的
,而不是
obj。选中的
。也不需要
==true
部分。只要
if(nodes[obj].selected){…
就足够了。另外,您应该真正添加一个
hasOwnProperty
检查,以便
对象的扩展。prototype
稍后不会显示在循环中。您需要测试
节点[obj].selected
,而不是
obj.selected
。也不需要
==true
部分。只要
if(nodes[obj].selected){…
就足够了。此外,您还应该添加一个
hasOwnProperty
检查,以便
对象的扩展。prototype
以后不会显示在循环中。