我将以下递归函数保存在一个名为helpers.js的文件中。当它加载到主应用程序中时.js文件使用:
var helpers = require('./helpers');
调用它只能部分工作。该行:
s+=recurseJSON(o[a]);
不会被调用,因此 JSON 解析不会递归到嵌套级别。
我也尝试了以下仍然不起作用的方法:
s+=helpers.recurseJSON(o[a]);
如果我将下面的代码移动到主应用程序.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:归功于递归解析原始递归代码的 JSON。
同时保留如下所示的导出语句:
module.exports = {
recurseJSON: function(o){
...
}
};
您可以使用语句s+=this.recurseJSON(o[a])
递归调用该函数,但前提是您在文件外部调用recurseJSON()
函数的唯一方法是
helpers.recurseJSON(obj)
这样recurseJSON()
就是helpers
的调用成员,使得recurseJSON()
中的this
指的是helpers
。
如果您不能保证这一点,那么调用它的正确方法是(更详细(是
s+=module.exports.recurseJSON(o[a])
更新
另一个更简单的解决方案是只命名要导出的函数:
module.exports = {
recurseJSON: function recurseJSON(o){
...
}
};
然后你可以像以前一样使用s+=recurseJSON(o[a])
。