为了完成某个自动化处理目录里数据,期望有这样到映射结果。
因为目录里到文件和深度是动态的,需要一个通用的方法处理目录里的数据。
举例说明如下:
目录结构为:
-- A -- a1.json -- AA -- a2.json -- a3.json -- B -- b1.json
映射为 cache 对象(目录结构和对象深度结构一致):
let cache= { A: { a1: { /* a1.json 文件内容 或 其他 */ }, AA: { a2: { /* a2.json 文件内容 或 其他 */ }, } }, B: { b1: { /* b1.json 文件内容 或 其他 */ }, } }
目前大致的做法是递归遍历目录,然后将目录结构赋值给一个全局变量(假设为 cache ),但遇到一个问题,递归时,取到某个文件的嵌套结构(比如 文件 A/AA/a2.json
假设取到 key_path="A/AA/a2"
),在给全局变量 cache 赋值时,怎么深层次对象赋值?(即如何给 cache 读取并赋值,其中深度为 key_path="A/AA/a2"
)
目前 eval 来赋值,如:
let _path = key_path.replace(key_path) eval("cache." + _path + "= 'a2 data' ") ;
当然上层可能还没被赋值,即浅深度 cahce[A], cahce[A][AA]的 值可能是 undefined。这样需要要解析处理,这里略过了。
请问,你们是如何处理这样的问题吗?或者有其他方式?
1 zbinlin 2019-06-09 00:34:54 +08:00 递归遍历时,不要传全局变量的那个 cache,而是只需要传当前目录在 cache 里的引用对象就可以了。 示例: gist github.com/zbinlin/3d8605394cda60adc8d624f45c855ca4 |
2 zbinlin 2019-06-09 00:35:46 +08:00 发 gist 居然需要验证? GIST。github。com/zbinlin/3d8605394cda60adc8d624f45c855ca4 |
![]() | 3 binux 2019-06-09 00:42:06 +08:00 via iPhone 这都什么鬼,你先把编程语言教程看完再来看这个问题 |
![]() | 4 imjeen OP |
![]() | 5 skypyb 2019-06-09 13:27:26 +08:00 via Android 。。。你搞个多路树然后递归文件夹不就完事了么 |