| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 | /* * @Description: 备份晨晨的代码 * @Autor: kindring * @Date: 2021-09-16 15:19:12 * @LastEditors: kindring * @LastEditTime: 2021-09-16 15:19:13 * @LastDescript:  */let input = {    a: {        b: "123",        c: {            d: 456,        },    },    b: {        e: 789,    },    f: 222,};const recursive = (tree, domain) =>    Object.entries(tree)    .map(([key, value]) => [value, domain ? `${domain}.${key}` : key])    .map(([value, subDomain]) =>        typeof value === "object" ? recursive(value, subDomain) : subDomain    )    .flat();function depthFirst(tree) {    const stack = [        [tree, ""]    ];    const res = [];    while (stack.length) {        const [crt, crtPath] = stack.pop();        if (typeof crt === "object") {            const entries = Object.entries(crt);            let i = entries.length;            while (i--) {                const [key, value] = entries[i];                const path = crtPath ? `${crtPath}.${key}` : key;                stack.push([value, path]);            }        } else {            res.push(crtPath);        }    }    return res;}function widthFirst(tree) {    const queue = [        [tree, ""]    ];    const res = [];    while (queue.length) {        const [crt, crtPath] = queue.shift();        if (typeof crt === "object") {            const entries = Object.entries(crt);            const last = entries.length - 1;            let i = -1;            while (i++ < last) {                const [key, value] = entries[i];                const path = crtPath ? `${crtPath}.${key}` : key;                queue.push([value, path]);            }        } else {            res.push(crtPath);        }    }    return res;}console.log(recursive(input));console.log(depthFirst(input));console.log(widthFirst(input));
 |