Underscorejs 'find' 没有按预期工作
Underscorejs 'find' not working as expected
我在 nodejs 应用程序中使用以下代码从构成邻接列表的数据库行数组构建树:
// 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
包获得相同的结果。
刚刚错过了return
。
var parent = _.find(flatTree, function(p) {
return p.Id == row.ParentId; // Return true if the ID matches
^^^^^^ <-- This
});
在您的代码中没有返回任何内容,因此默认情况下将返回 undefined
而 parent
将不包含任何数据。
我在 nodejs 应用程序中使用以下代码从构成邻接列表的数据库行数组构建树:
// 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
包获得相同的结果。
刚刚错过了return
。
var parent = _.find(flatTree, function(p) {
return p.Id == row.ParentId; // Return true if the ID matches
^^^^^^ <-- This
});
在您的代码中没有返回任何内容,因此默认情况下将返回 undefined
而 parent
将不包含任何数据。