编辑代码

var a = {
    b: {
        c: 1,
        d: 2,
        e: [1,2,3, [4,5,6], {name: 'haha', age: 18}]
    },
    haha: 'zzz',
    bb: [88,99,11,{ ert: 11, zzz: [1,2,3] }]
}

function isObject (val) {
    return typeof val === 'object' && val !== null;
}
function flatter (obj) {
    const hash = {};
    function process (val, key = '') {
        if (Array.isArray(val)) {
            val.forEach((v, index) => {
                process(v, `${key}[${index}]`);
            });
        } else if (isObject(val)) {
            for (const item in val) {
                process(val[item], key ? `${key}.${item}` : item)
            }
        } else {
            hash[key] = val;
        }
    }
    process(obj);
    return hash;
}


function arrFlat (arr) {
    return arr.reduce((prev, cur) => {
        return Array.isArray(cur) ? [...prev, ...arrFlat(cur)] : [...prev, cur]
    }, []);
}
function arrFlat2 (arr) {
    while (arr.some((item) => Array.isArray(item))) {
        arr = [].concat(...arr);
    }
    return arr;
}
console.log(flatter(a));
console.log(arrFlat([1,2,3,[4,5,6,[7,8,9,[10]]]]));
console.log(arrFlat2([1,2,3,[4,5,6,[7,8,9,[10]]]]));