2016-12-13 13 views
0

上の値を取得:JavaScriptでJavaScriptオブジェクト私はこのようなオブジェクトを持って

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

どのように私はのためのオブジェクトを検索します「を選択:真」を、そしてその上にラベル値を取得する、すなわち「ノード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

。 –

+0

あなたは正しいです。キャッチをありがとう。 – TheValyreanGroup

+0

'== true'の部分は必要ありません。ちょうど 'if(nodes [obj] .selected){...}で十分です。 –

1

することはでき(あなたがObject.keysで取得することができます)と、そのキーのノードオブジェクトがselectedあるかどうかを確認structure.root.nodesのキーをループ。このデモの目的のために、私はちょうど選択した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あなたは `ノード[OBJ] .selected`、ない` obj.selected`をテストする必要があり

関連する問題