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 1
楼主,看你的意思好像不知道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 1
|
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 2
|
16
imn1 2015-06-16 13:14:50 +08:00
@Septembers
浏览器是有对脚本运行时间限制的,一般人不会调这个,起码我也是只知道firefox怎么调 如果太多脚本、或者运算时间长,页面就会卡住(引擎好的会报错),用户体验就差了 前端首先要考虑低端配置的客户端,而不是认为客户端必然有“富余” |
19
oxyflour 2015-06-16 13:27:04 +08:00 1
|
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 1
@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拿来主义
|