Here is the simple implementation to find a node by any property.
function findBy(data, param, value){
var result = null;
forNodes(data, function(node){
if (node[param] == value){
result = node;
return false;
}
});
return result;
}
function forNodes(data, callback){
var nodes = [];
for(var i=0; i<data.length; i++){
nodes.push(data[i]);
}
while(nodes.length){
var node = nodes.shift();
if (callback(node) == false){return;}
if (node.children){
for(var i=node.children.length-1; i>=0; i--){
nodes.unshift(node.children[i]);
}
}
}
}
Some usage examples:
var node = findBy(data, 'id', 200); // find by id
var node = findBy(data, 'text', 'Node 2'); // find by text