Jannick Knudsen 5 роки тому
батько
коміт
75f9da5910
1 змінених файлів з 87 додано та 75 видалено
  1. 87 75
      index.js

+ 87 - 75
index.js

@@ -1,104 +1,116 @@
-    function getpath(obj, path) {
-        path = path || "";
-        var arr = path.split(".");
-        var t = obj;
-        var done = false;
-        if (arr.length) {
-            while (arr.length && !done) {
-                var check = arr.shift();
-                if (check !== "") {
-                    t = t[check];
-                }
-                if (typeof t !== "object") {
-                    done = true;
+    function mker(delimiter) {
+
+        function getpath(obj, path) {
+            path = path || "";
+            var arr = path.split(delimiter);
+            var t = obj;
+            var done = false;
+            if (arr.length) {
+                while (arr.length && !done) {
+                    var check = arr.shift();
+                    if (check !== "") {
+                        t = t[check];
+                    }
+                    if (typeof t !== "object") {
+                        done = true;
+                    }
                 }
             }
+            return t;
         }
-        return t;
-    }
 
-    function setpath(obj, path, value) {
-        if (typeof obj !== "object" || !obj) {
-            throw new Error("obj is not Object");
-        }
-        if (typeof path !== "string" || path === "") {
-            throw new Error("path must be string with length > 0");
-        }
-        var arr = path.split(".");
-        var done = false;
-        var t = obj;
-        if (arr.length > 1) {
-            while (arr.length && t && !done) {
-                var check = arr.shift();
-                if (typeof t[check] === "object" && arr.length > 0) {
-                    t = t[check];
-                } else {
-                    done = true;
-                    arr.unshift(check);
-                }
+        function setpath(obj, path, value) {
+            if (typeof obj !== "object" || !obj) {
+                throw new Error("obj is not Object");
             }
-            var xt = t;
-            while (arr.length) {
-                var tt = arr.shift();
-                if (arr.length) { //go deeper
-                    xt = xt[tt] = {};
-                } else {
-                    //last
-                    xt[tt] = value;
-                }
+            if (typeof path !== "string" || path === "") {
+                throw new Error("path must be string with length > 0");
             }
-        } else {
-            if (arr.length === 1 && arr[0] !== "") {
-                t[arr[0]] = value;
+            var arr = path.split(delimiter);
+            var done = false;
+            var t = obj;
+            if (arr.length > 1) {
+                while (arr.length && t && !done) {
+                    var check = arr.shift();
+                    if (typeof t[check] === "object" && arr.length > 0) {
+                        t = t[check];
+                    } else {
+                        done = true;
+                        arr.unshift(check);
+                    }
+                }
+                var xt = t;
+                while (arr.length) {
+                    var tt = arr.shift();
+                    if (arr.length) { //go deeper
+                        if ((parseInt(arr[0]) + "") === ("" + arr[0])) {
+                            xt = xt[tt] = [];
+                        } else {
+                            xt = xt[tt] = {};
+                        }
+                    } else {
+                        //last
+                        xt[tt] = value;
+                    }
+                }
+            } else {
+                if (arr.length === 1 && arr[0] !== "") {
+                    t[arr[0]] = value;
+                }
             }
         }
-    }
 
-    function sort_by_1_col(a, b) {
-        return a[0] > b[0] ? -1 : a[0] < b[0] ? 1 : 0;
-    }
+        function sort_by_1_col(a, b) {
+            return a[0] > b[0] ? -1 : a[0] < b[0] ? 1 : 0;
+        }
 
-    function sort_by_1_col_alpha(a, b) {
-        var x = a[0].toLowerCase(),
-            y = b[0].toLowerCase();
-        return x < y ? -1 : x > y ? 1 : 0;
-    }
+        function sort_by_1_col_alpha(a, b) {
+            var x = a[0].toLowerCase(),
+                y = b[0].toLowerCase();
+            return x < y ? -1 : x > y ? 1 : 0;
+        }
 
-    function query(obj, str) {
+        function query(obj, str) {
 
 
-        console.log(obj);
+            console.log(obj);
 
-        console.log(str);
+            console.log(str);
 
 
 
-    }
+        }
 
 
-    function flatten(obj, pre) {
-        var pre = pre || "";
-        var r = [];
-        for (var i in obj) {
-            if (typeof(obj[i]) === "object") {
-                r = r.concat(flatten(obj[i], (pre.length > 0 ? pre + "." : "") + i));
-            } else {
-                r.push([(pre.length > 0 ? pre + "." : "") + i, "" + obj[i]]);
+        function flatten(obj, pre) {
+            var pre = pre || "";
+            var r = [];
+            for (var i in obj) {
+                if (typeof(obj[i]) === "object") {
+                    r = r.concat(flatten(obj[i], (pre.length > 0 ? pre + delimiter : "") + i));
+                } else {
+                    r.push([(pre.length > 0 ? pre + delimiter : "") + i, "" + obj[i]]);
+
+                }
 
             }
+            r.sort(sort_by_1_col_alpha)
+            return r;
+
 
         }
-        r.sort(sort_by_1_col_alpha)
-        return r;
 
 
+        return {
+            get: getpath,
+            set: setpath,
+            flatten: flatten,
+            query: query
+        }
+
     }
 
 
 
-    module.exports = {
-        get: getpath,
-        set: setpath,
-        flatten: flatten,
-        query: query
-    }
+    module.exports = mker(".");
+    module.exports.create = mker;