function getPaths(pathIds, subCategory, callback){
var currentCategory = JSON.parse(JSON.stringify(subCategory));
console.log(currentCategory);
console.log(currentCategory.name);
var paths = [];
var pathDirs = "";
for (i=0; i<pathIds.length; i++) {
pathDirs += pathIds[i];
paths[i] = {dir : pathDirs, name : currentCategory.name};
currentCategory = currentCategory.categories.find(function(category){
return category.id = pathIds[i];
});
}
callback(paths);
}
我是js和node.js的新手。我收到上述错误,并且我认为它引用了currentCategory.name属性。当我输入console.log(currentCategory)时,我打印了包括名称属性在内的整个对象。 我做错了什么?
这是我获得的堆栈跟踪以获取更多信息:
D:\repos\onlineStore\borrislava-onlinestore\Backup\Work\node_modules\mongodb\lib\utils.js:132
throw err;
^
TypeError: Cannot read property 'name' of undefined
at getPaths (D:\repos\onlineStore\borrislava-onlinestore\Backup\Work\routes.js:124:54)
at D:\repos\onlineStore\borrislava-onlinestore\Backup\Work\routes.js:24:4
at D:\repos\onlineStore\borrislava-onlinestore\Backup\Work\routes.js:112:3
at result (D:\repos\onlineStore\borrislava-onlinestore\Backup\Work\node_modules\mongodb\lib\utils.js:414:17)
at executeCallback (D:\repos\onlineStore\borrislava-onlinestore\Backup\Work\node_modules\mongodb\lib\utils.js:406:9)
at handleCallback (D:\repos\onlineStore\borrislava-onlinestore\Backup\Work\node_modules\mongodb\lib\utils.js:128:55)
at cursor.close (D:\repos\onlineStore\borrislava-onlinestore\Backup\Work\node_modules\mongodb\lib\operations\cursor_ops.js:218:62)
at handleCallback (D:\repos\onlineStore\borrislava-onlinestore\Backup\Work\node_modules\mongodb\lib\utils.js:128:55)
at completeClose (D:\repos\onlineStore\borrislava-onlinestore\Backup\Work\node_modules\mongodb\lib\cursor.js:887:14)
at _endSession (D:\repos\onlineStore\borrislava-onlinestore\Backup\Work\node_modules\mongodb\lib\cursor.js:898:37)
答案 0 :(得分:0)
您的循环中有几个问题:
for (i=0; i<pathIds.length; i++) {
pathDirs += pathIds[i];
paths[i] = {dir : pathDirs, name : currentCategory.name};
currentCategory = currentCategory.categories.find(function(category){
return category.id = pathIds[i];
});
}
1-Array.prototype.find将返回与提供的函数的return子句中的条件匹配的第一个元素。
如果没有元素符合条件,则undefined
会受currentCategory
变量的影响。然后,当再次循环时,currentCategory
未定义,您将得到:
TypeError:无法读取未定义的属性“名称”
2-您的return子句中也有错字。您正在设置category.id
,而不是将其与pathIds[i]
进行比较:
return category.id = pathIds[i]
您确定不想比较它们吗?因为现在,您要设置category.id并将其返回到函数中。因此,如果find
等于0,则您提供给pathIds[i]
的函数将返回false,否则返回true。那真的是你想要的吗?