需要在函数结果之前列出节点中的每个文件名

时间:2015-07-22 20:03:01

标签: node.js recursion

我使用node来检查目录树并告诉我一组JSON文件中的所有空值。但是,以下代码返回文件路径列表,然后返回函数的结果。我希望每个文件名都在其结果之前:

文件名

结果

结果

文件名

...结果

var glob = require("glob"),
fs = require('fs');


glob("**/*/locales/*/*.json", function (er, files) {
    for(var i = 0; i < files.length; i++  ){

        console.log(files[i]);

        fs.readFile(files[i], 'utf8', function (err,data) {
                if (err) {
                    return console.log(err);
                }

                var local = JSON.parse(data);
                checkStr(local);
        });

    }
});

function checkStr (obj, parent) {
    var parent = parent || "";
    if (parent.length > 0) {parent = parent + '.'}
    for(key in obj) {
        if(typeof(obj[key]) === "object" && obj.hasOwnProperty(key)){
            checkStr(obj[key], key);
        }
        else {
            if(!obj[key].valueOf()){
                console.log( "This is empty: " + parent + key );
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

这应该有效:

var glob = require('glob');
var fs = require('fs');

function isObjectEmpty(obj) {
    for (var name in obj) {
        return false;
    }
    return true;
}

function findEmptyKey(parent, obj) {
    var result = [];
    for (var key in obj) {
        if(typeof obj[key] === "object") {
            if (isObjectEmpty(obj[key])) {
                result.push(parent + '\\' + key);
            } else {
                Array.prototype.push.apply(result, findEmptyKey(key, obj[key]));
            }
        } else if (!obj[key]) {
            result.push(parent + '\\' + key);
        }
    }
    return result;
}

function processFile(file) {

    fs.readFile(file, 'utf8', function (err,data) {
        var keys = findEmptyKey('', JSON.parse(data));
        if (keys.length>0) {
            console.log(file);
            keys.forEach(function(key) { console.log('This is empty: ' + key); });
        }
    });
}

glob("**/*/locales/*/*.json", function (er, files) {
    files.forEach(processFile);
});