johncrisostomo/mongo-flatten

View on GitHub
index.js

Summary

Maintainability
C
7 hrs
Test Coverage
module.exports = document => {
    const result = {};

    const traverse = (current, key) => {
        if (Object(current) !== current) {
            result[key] = current;
        } else if (Array.isArray(current)) {
            let len = current.length;

            for (let i = 0; i < len; i += 1) {
                traverse(current[i], key + '.' + i);
            }

            if (len === 0) {
                result[key] = [];
            }
        } else {
            let isEmpty = true;

            if (typeof current.getMonth === 'function') {
                isEmpty = false;
                result[key] = String(current.getTime());
            } else {
                for (let k in current) {
                    isEmpty = false;
                    if (k === '_id') {
                        result[k] = current[k.toString()];
                    } else {
                        traverse(current[k], key ? key + '.' + k : k);
                    }
                }
            }

            if (isEmpty && key) {
                result[key] = '';
            }
        }
    };

    traverse(document, '');

    return result;
};