Javascript Can';t获取对象I'的属性;我创造了。看起来MongoDB的猫鼬有问题
UPD。用一行代码解决问题: .lean() 我在Model.find(…blabla: [ {“_id”:“578763de6e8e0542195ef4e8”, “文本”:“列表”、“iconCls”:“fa集团fa lg”, “className”:null, “菜单id”:null} {“_id”:“578762146e8e0542195ef4e7”, “iconCls”:“fa集团fa lg”, “类名称”:“面板”, “菜单id”:“578763de6e8e0542195ef4e8”, “文本”:“个人”} {“_id”:“578770aca59f4d173c948376”, “文本”:“信息”, “iconCls”:“xf007”, “className”:null, “菜单id”:null} {“_id”:“5787715aa59f4d173c94837c”, “文本”:“汽车”, “类名称”:“面板”, “菜单id”:“578763de6e8e0542195ef4e8”,“iconCls”:“xf007”} {“_id”:“5787721ca59f4d173c94837f”, “文本”:“现在”, “iconCls”:“xf007”, “类名”:“xf007”, “菜单id”:“578770aca59f4d173c948376”}] 我想从它们中构建树菜单:Javascript Can';t获取对象I'的属性;我创造了。看起来MongoDB的猫鼬有问题,javascript,mongodb,Javascript,Mongodb,UPD。用一行代码解决问题: .lean() 我在Model.find(…blabla: [ {“_id”:“578763de6e8e0542195ef4e8”, “文本”:“列表”、“iconCls”:“fa集团fa lg”, “className”:null, “菜单id”:null} {“_id”:“578762146e8e0542195ef4e7”, “iconCls”:“fa集团fa lg”, “类名称”:“面板”, “菜单id”:“578763de6e8e0542195ef4e8”
function buildMenu(source){
var menu = []; //Массив для нового, уже пирамидального меню
for (var i=0; i<source.length; i+=1){
if(source[i].menu_id === null){ //Выбираем верхние пункты меню
source[i].items = [];
for(var j=0; j<source.length;j+=1){
if(source[j].menu_id !== null){
if(source[i]._id.toString() == source[j].menu_id.toString()){
//найден дочерний пункт меню
source[i].items.push(source[j]);
}
}
}
menu.push(source[i]);
}
}
// Проверка
console.log(menu[0].items);
console.log(menu);
return menu;
}
函数构建菜单(源代码){
var菜单=[];//Маааааааааааааааааа
对于(var i=0;i,您可以使用一个对象构建树,用于查找和创建具有随机源顺序的树
var source=[{u id:“578763e8e0542195ef4e8”,“text:“list”,“iconCls:“fa-fa-fa-group fa-lg”,“className:”null,“menu-id:”null},{u-id:“578762146e8e0542195ef4e7”,“iconCls:”fa-fa-fa-fa-fa-lg”,“className:”panel”,“menu-id:“578763e6e8e0542195ef4e8”,“text:”个人“,{-id:”5787705aca59f43c8376”,“text:“文本”:”,“iconCls”:“xf007”,“className”:null,“menu_id”:null},{“\u id”:“5787715aa59f4d173c94837c”,“text”:“cars”,“className”:“panel”,“menu_id”:“578763de6e8e0542195ef4e8”,“iconCls”:“xf007”},{“\u id”:“5787721ca59f4d173c94837f”,“text”:“now”,“iconCls”:“xf007”,“className”:“xf007”,“menu id”:“578770F473C948376”},
树=函数(数据,根){
var r=[],o={};
data.forEach(函数(a){
a、 items=o[a.\u id]&&o[a.\u id]。items;
o[a._id]=a;
if(a.menu_id==根){
r、 推(a);
}否则{
o[a.menu_id]=o[a.menu_id]|{};
o[a.menu_id].items=o[a.menu_id].items | |[];
o[a.menu\u id].items.push(a);
}
});
返回r;
}(来源,空);
console.log(树)
结果应该是什么样的?您想返回什么以及您得到的结果是什么..您能用适当的数据@Antonpegov澄清一下吗?您的意思是控制台中缺少项
属性。日志输出?它可能只在所使用的显示中缺少。您能在浏览器中放大对象吗?这也取决于在浏览器中,您可以尝试使用console.dir
而不是console.log来测试完整对象,或者使用JSON。stringify
我从mongoDB数据库获取菜单数组,然后将结果与node.js一起发送到浏览器。在浏览器控制台中,我也看不到我的项目:[链接]是的,这是Mongoose的问题beacose,仍在调查…SNK!我认为问题在于我使用Mongoose对象处理mongoDB数据。你的代码在plain node.js中工作,但在我的应用程序中不工作(你的数据排序了吗?我是说首先是父母吗?否,[链接]如果有帮助的话,你可以使用for
循环,而不是forEach
。我试过了,我想一切都好了……我已经用数据库屏幕更新了我的帖子。
function buildMenu(source){
var menu = []; //Массив для нового, уже пирамидального меню
for (var i=0; i<source.length; i+=1){
if(source[i].menu_id === null){ //Выбираем верхние пункты меню
source[i].items = [];
for(var j=0; j<source.length;j+=1){
if(source[j].menu_id !== null){
if(source[i]._id.toString() == source[j].menu_id.toString()){
//найден дочерний пункт меню
source[i].items.push(source[j]);
}
}
}
menu.push(source[i]);
}
}
// Проверка
console.log(menu[0].items);
console.log(menu);
return menu;
}
[ { _id: 578762146e8e0542195ef4e7,
iconCls: 'fa fa-group fa-lg',
className: 'panel',
menu_id: 578763de6e8e0542195ef4e8,
text: 'personal' },
{ _id: 5787715aa59f4d173c94837c,
text: 'cars',
className: 'panel',
menu_id: 578763de6e8e0542195ef4e8,
iconCls: 'xf007' } ]
[ { _id: 578763de6e8e0542195ef4e8,
text: 'lists',
iconCls: 'fa fa-group fa-lg',
className: null,
menu_id: null },
{ _id: 578770aca59f4d173c948376,
text: 'info',
iconCls: 'xf007',
className: null,
menu_id: null } ]
[ { _id: 578763de6e8e0542195ef4e8,
text: 'lists',
iconCls: 'fa fa-group fa-lg',
className: null,
menu_id: null
items: [
{ _id: 578762146e8e0542195ef4e7,
iconCls: 'fa fa-group fa-lg',
className: 'panel',
menu_id: 578763de6e8e0542195ef4e8,
text: 'personal' },
{ _id: 5787715aa59f4d173c94837c,
text: 'cars',
className: 'panel',
menu_id: 578763de6e8e0542195ef4e8,
iconCls: 'xf007' }
]
.....
.get('/menu', function(req,res){
var user_id = '5784b872a59f4d0f805a617d'; //пользователь boss/boss
User.find({_id:user_id})
.populate({
path: 'group',
populate: {
path: 'menu',
ref: 'Menu'
}
})
.exec(function(err,user) {
if (err) {
console.log(err.red, req.method, req.url);
res.status(500).end();
return err;
} else if (!user) {
res.status(404).end();
console.log(('Запрос вернул: ' + user).red);
} else {
res.status(200).send(buildMenu(user[0].group.menu));
}
});
//
})