如何在另一个文件

时间:2017-07-01 06:26:00

标签: node.js recursion

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

1 个答案:

答案 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])