如何在另一个文件的节点 js 中包含递归函数



我将以下递归函数保存在一个名为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])

最新更新