0
我使用下面的代碼,在一個的NodeJS應用程序,從形成鄰接表數據庫行的一組構建樹:Underscorejs「發現」工作不正常
// Lay out every node in the tree in one flat array.
var flatTree = [];
_.each(rows, function(row) {
flatTree.push(row);
});
// For each node, find its parent and add it to that parent's children.
_.each(rows, function(row) {
// var parent = _.find(flatTree, function(p) {
// p.Id == row.ParentId;
// });
var parent;
for (var i = 0; i < flatTree.length; i++){
if (flatTree[i].Id == row.ParentId) {
parent = flatTree[i];
break;
}
};
if (parent){
if (!parent.subItems) {
parent.subItems = [];
};
parent.subItems.push(row);
}
});
我希望註釋掉_.find
調用的做法與在其下執行的for
循環完全相同,但_.find
永遠不會找到flatTree
中的父節點,而for
循環始終會執行此操作。
同樣,要_.filter
打電話只是也不管用,而替代循環的作用:
// var rootItems = _.filter(flatTree, function (node) {
// //node.ParentId === null;
// node.NoParent === 1;
// })
var rootItems = [];
for (var i = 0; i < flatTree.length; i++){
if (flatTree[i].ParentId == null){
rootItems.push(flatTree[i]);
}
}
我現在用的是underscore-node
包,但嘗試,並與常規underscore
包相同的結果。
是的,謝謝。我在提出這個問題後不久就意識到,正如我在腦海中從箭頭函數語法翻譯的那樣,不需要返回。我太習慣C#LINQ。但是我留下的問題可能會幫助別人,給別人一個回答的機會。 – ProfK