Generators - Recursively log tree data

Generators - Recursively log tree data

by Nirvanachain

JavaScript

var treeData = [
  { id: "0" },
  {
    id: "1",
    children: [
      {
        id: "1.1",
        children: [
          {
            id: "1.1.1",
            children: [
              {
                id: "1.1.1.1",
                children: [
                  { id: "1.1.1.1.1" },
                  { id: "1.1.1.1.2" },
                  { id: "1.1.1.1.3" }
                ]
              },
              { id: "1.1.1.2" },
              { id: "1.1.1.3" }
            ]
          },
          { id: "1.1.2" },
          { id: "1.1.3" },
        ]
      },
      { id: "1.2" },
      { id: "1.3" }
    ]
  },
  { id: "2" },
  { id: "3" }
];

function* processData(data){
  if (!data) { return; }

	for (var obj of data) {
  	yield obj.id;
  	
  	if (obj.children) {
    	yield processData(obj.children);
    }
  }
}

var it = processData(treeData);

for (var i of it) {
	console.log(i);
  if (i.done) {
  	console.log('done!!!');
  }
  
  console.log(i);
}
/**
Example with a while-loop
var res = it.next();

while(!res.done){
  console.log(res.value);
  res = it.next();
}
**/