kindring 3 лет назад
Родитель
Сommit
871d88358e
1 измененных файлов с 77 добавлено и 0 удалено
  1. 77 0
      js/晨晨每日js.js

+ 77 - 0
js/晨晨每日js.js

@@ -0,0 +1,77 @@
+/*
+ * @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));