1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- /*
- * @Description: 备份晨晨的代码
- * @Autor: kindring
- * @Date: 2021-09-16 15:19:12
- * @LastEditors: kindring
- * @LastEditTime: 2021-10-29 10:42:21
- * @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));
|