2016-12-13 96 views
0

我有一个这样的对象:Javascript对象获取值以上

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

在javascript中我如何搜索“选择:真正的”对象,并把它上面的标签值,即“节点2”

回答

1

你想使用for循环。

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

您需要测试'节点[OBJ] .selected',不'obj.selected'。 –

+0

你说得对。谢谢你的收获。 – TheValyreanGroup

+0

也不需要'== true'部分。只要'if(nodes [obj] .selected){...'就够了。 –

1

你可以通过structure.root.nodes的钥匙(你可以用Object.keys获得),并检查在这个关键节点对象是否是selected循环。为了演示的目的,我只记录了所选的node.label

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

 
var nodes = structure.root.nodes, 
 
    keys = Object.keys(nodes) 
 

 
for (var i = 0; i < keys.length; i++) { 
 
    var node = nodes[keys[i]] 
 
    if (node.selected) { 
 
    console.log("Selected:", node.label) 
 
    break; 
 
    } 
 
}

1
for (n in structure.root.nodes) { 
    if (structure.root.nodes[n].selected) { 
    console.log("the node which is selected is: " + n); 
    } 
} 
+1

处理对象字面量时不需要'hasOwnProperty'。 –

+0

你说得很对,会编辑,谢谢指出 – faboolous

0

这将递归遍历你的对象寻找选定的值,返回键名,如果发现。

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

 
const findSelected = (obj, ret = '') => { 
 
    for (let key in obj) { 
 
    if (obj[key].selected) { 
 
     return key 
 
    } 
 
    if (obj[key].constructor === Object) { 
 
     ret = findSelected(obj[key]) 
 
     if (ret) return ret 
 
    } 
 
    } 
 
} 
 

 
console.log(
 
    findSelected(structure) 
 
)

0

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

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); 
    } 
}); 

参考:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/keys