我将以下递归函数保存在名为helpers.js的文件中。使用以下命令将其加载到主app.js文件中时
var helpers = require('./helpers');
调用它只能部分工作。这一行:
s+=recurseJSON(o[a]);
没有被调用,因此JSON解析不会进入嵌套级别。
我也尝试了以下仍然无效的方法:
s+=helpers.recurseJSON(o[a]);
如果我将下面的代码移动到主app.js文件中,则递归工作完美,显然正在改变
recurseJSON: function(o) {...
到
function recurseJSON(o) {..
您的意见表示赞赏。这是完整的代码:
module.exports = {
recurseJSON: function(o){
var s = '';
for(var a in o){
if (typeof o[a] == 'object'){
s+=a+':';
console.log('JSON>', a, ":");
s+=recurseJSON(o[a]); // This line should recurse but doesn't
}else{
s+=a+':'+o[a]+' ';
console.log('JSON>', a, ":", o[a]);
}//end if
}//end for
return s;
}
};
PS:原始递归代码归功于Recursively parsing JSON。
答案 0 :(得分:1)
在保留导出语句的同时:
module.exports = {
recurseJSON: function(o){
...
}
};
您可以使用语句s+=this.recurseJSON(o[a])
递归调用该函数,但只假设您在文件外调用recurseJSON()
函数的唯一方法是
helpers.recurseJSON(obj)
以便recurseJSON()
成为helpers
的调用成员,使this
中的recurseJSON()
引用helpers
。
如果你不能保证这一点,那么调用它的正确方法(更详细)是
s+=module.exports.recurseJSON(o[a])
另一个更简单的解决方案是命名您要导出的功能:
module.exports = {
recurseJSON: function recurseJSON(o){
...
}
};
然后你可以像以前一样使用s+=recurseJSON(o[a])
。