
var arr = [ {id:1, pid:0, name:"SYSTEM"}, {id:2, pid:1, name:"aa"}, {id:3, pid:2, name:"aaa"}, {id:4, pid:2, name:"b"}, {id:5, pid:0, name:"c"}, {id:6, pid:5, name:"cc"} ]; /* var result = [{ "name": "SYSTEM", "expanded": true, "id": 0, "items": [ { name: "Sub", "expanded": true, "id":1, "pid":0, "items":[ ......] }, {} } ]; */ 遇到这样的就傻眼了,99
1 Jaylee 2015-06-16 12:33:50 +08:00 你在说啥? |
2 coolicer OP @Jaylee ```js 生成这样的结构 var datasource = [{ "text": "null",//根节点 "expanded": true, "items": [ { "text":"user1",//第一个子菜单 "expanded": true, "items":[ { "text":"user2",//二级菜单 "expanded": true, "items":[ { "text":"user4",//三级 "items":[ { "text":"user5"//四级 } ] } ] }, { "text":"user3", } ] }, ] }]; ``` |
3 imn1 2015-06-16 12:37:10 +08:00 这个事情就不要在前端做了,除非是用nodejs |
4 sneezry 2015-06-16 12:37:11 +08:00 via iPhone 楼主,看你的意思好像不知道js里树应该怎么写出来吗~不用这么搞,js里其实也有指针,对象和数组直接引用就是指针。爪机打字太费事,一会给楼主个例子。 |
5 coolicer OP <script src="https://gist.github.com/coolicer/073bd830ea45895ee467.js"></script> |
8 Septembers 2015-06-16 12:48:15 +08:00 via Android |
9 Septembers 2015-06-16 12:55:32 +08:00 via Android @imn1 为什么不利用 桌面 过剩的算力? (如果前端渣,导致阻塞的话那另说 |
10 coolicer OP @Septembers 有点叼哦。5行。 |
11 coolicer OP @Septembers 额,我看看怎么转成 js. |
12 Septembers 2015-06-16 13:04:10 +08:00 via Android @coolicer 自己移植下 完事 |
13 loading 2015-06-16 13:06:10 +08:00 via Android @Septembers 前几天也写文件管理也遇到目录树传到前端,参考下重构下自己的代码。 |
14 Septembers 2015-06-16 13:07:34 +08:00 via Android 1 @coolicer 找参考实现别死盯着目标语言,有时候找找其他的语言的 移植过来用也不错 |
15 czheo 2015-06-16 13:08:45 +08:00 |
16 imn1 2015-06-16 13:14:50 +08:00 @Septembers 浏览器是有对脚本运行时间限制的,一般人不会调这个,起码我也是只知道firefox怎么调 如果太多脚本、或者运算时间长,页面就会卡住(引擎好的会报错),用户体验就差了 前端首先要考虑低端配置的客户端,而不是认为客户端必然有“富余” |
19 oxyflour 2015-06-16 13:27:04 +08:00 |
20 Septembers 2015-06-16 13:29:19 +08:00 via Android @oxyflour 递归深度太深不会炸? |
22 iNaru 2015-06-16 13:38:31 +08:00 var temp = []; for(var i in arr){ arr[i].expanded = true; var id = arr[i].pid - 1; (id in arr ? (arr[id].items || (arr[id].items = [])) : temp).push(arr[i]) } console.log(temp); |
23 oxyflour 2015-06-16 13:41:01 +08:00 @Septembers 会炸的(但是用 ff 试了,深度要到好几千呢,比如下面这个就不会炸 tree(0, Array.apply(null, new Array(2048)).map((v, i) => { return {id:i+1, pid:i} })) |
25 Septembers 2015-06-16 13:48:00 +08:00 via Android @imn1 1. 主流用户 2. 高端用户 建立在主流之上满足用户 3. 低端用户 建立在主流以下满足用户 先满足主流 如果 低端/主流 用户想得到 主流/高端 的体验请升级 众口难调 某些用户喜欢在 低端位置 获取 高端体验 这样诉求只能是miss |
26 imn1 2015-06-16 13:59:57 +08:00 @Septembers 这个就不用跟我说了,我全职做市场调查超过5年,非全职市场分析超过20年 |
27 skyler 2015-06-16 16:50:08 +08:00 看看 jstree 找找灵感吧 XD |
28 br00k 2015-06-17 09:15:20 +08:00 一般都是后端干好吧。 |
29 mingzepeng 2015-06-17 09:56:13 +08:00 像js这种动态语言,生成树结构不要太方便啊 |
30 mingzepeng 2015-06-17 09:57:55 +08:00 看错楼主的表达了,不好意思。 |
31 coolicer OP |
32 siroccoicode 2015-06-17 14:28:05 +08:00 @coolicer 你的用例中id、pid为字符串型,而作者代码判断条件使用===判断的数字型。作者代码中还有一个问题:如果原数组中id排序并非顺序,会出现parent在objMap取空的问题 |
33 coolicer OP @siroccoicode 谢谢提醒 |
34 czheo 2015-06-17 18:55:07 +08:00 via iPhone @siroccoicode objMap的bug都看出来了,你真仔细。不像某些lz拿来主义 |