Код писал сумрачный гений, который считает названия типа _i, _len, o само собой разумеющимися. Перевожу телепатически:
function _makeTree(options) {
var id = options.id || "id";
var parentid = options.parentid || "parentid";
var children = options.children || "children";
var itemsById = {};
var result = [];
var stack = options.q;
for (var i = 0, l = stack.length; i < l; i++) {
var item = stack[i];
item[children] = [];
itemsById[item[id]] = item;
if (itemsById[item[parentid]] != null) {
itemsById[item[parentid]][children].push(item);
} else {
result.push(item);
}
}
return result;
}
Небольшую неясность вносит также то, что во входящей структуре q и в результате в качестве имен свойств 'id', 'parentid' и 'children' можно использовать произвольные строки, переданные в options. Это местами превращает код в череду вложенных квадратных скобок вместо нормальных обращений к свойствам.