2016-06-12 1 views
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 루프와 똑같은 작업을 수행하지만 루프는 항상 에 부모 노드를 찾지 않으며 루프는 항상 수행합니다.

// 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 패키지와 동일한 결과를 시도하고 있었다 : 대체 루프가하는 동안

마찬가지로, _.filter를 호출 단지 중 하나가 작동하지 않습니다 .

답변

3

방금 ​​return을 놓쳤습니다. 반환되는 기본 undefined으로 귀하의 코드 아무것도에서

var parent = _.find(flatTree, function(p) { 
    return p.Id == row.ParentId; // Return true if the ID matches 
    ^^^^^^ <-- This 
}); 

는 반환 및 parent는 모든 데이터가 포함되지 않습니다.

+0

네, 감사합니다. 나는 질문을 한 직후에, 화살표 함수 구문에서 내 마음으로 번역 했으므로 반환이 필요하지 않은 것을 깨달았다. 나는 C# LINQ에도 익숙하다. 그러나 나는 다른 사람들을 도울 수있는 질문을 공개적으로 남겨두고 누군가에게 대답 할 수있는 기회를 제공했습니다. – ProfK