js 怎么生成树结构,算法太烂

2015-06-16 12:25:07 +08:00
 coolicer
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

7472 次点击
所在节点    JavaScript
35 条回复
Jaylee
2015-06-16 12:33:50 +08:00
你在说啥?
coolicer
2015-06-16 12:36:02 +08:00
@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",
}
]
},
]
}];
```
imn1
2015-06-16 12:37:10 +08:00
这个事情就不要在前端做了,除非是用nodejs
sneezry
2015-06-16 12:37:11 +08:00
楼主,看你的意思好像不知道js里树应该怎么写出来吗~不用这么搞,js里其实也有指针,对象和数组直接引用就是指针。爪机打字太费事,一会给楼主个例子。
coolicer
2015-06-16 12:37:11 +08:00
coolicer
2015-06-16 12:38:12 +08:00
@sneezry 差不多吧,没搞过。问过一些都不懂,好失望
coolicer
2015-06-16 12:38:56 +08:00
@imn1 没办法,业务分给前端做。还要自己写存储过程拿结果。
Septembers
2015-06-16 12:48:15 +08:00
Septembers
2015-06-16 12:55:32 +08:00
@imn1 为什么不利用 桌面 过剩的算力?
(如果前端渣,导致阻塞的话那另说
coolicer
2015-06-16 13:01:14 +08:00
@Septembers 有点叼哦。5行。
coolicer
2015-06-16 13:02:43 +08:00
@Septembers 额,我看看怎么转成 js.
Septembers
2015-06-16 13:04:10 +08:00
@coolicer 自己移植下 完事
loading
2015-06-16 13:06:10 +08:00
@Septembers 前几天也写文件管理也遇到目录树传到前端,参考下重构下自己的代码。
Septembers
2015-06-16 13:07:34 +08:00
@coolicer 找参考实现别死盯着目标语言,有时候找找其他的语言的 移植过来用也不错
czheo
2015-06-16 13:08:45 +08:00
imn1
2015-06-16 13:14:50 +08:00
@Septembers
浏览器是有对脚本运行时间限制的,一般人不会调这个,起码我也是只知道firefox怎么调
如果太多脚本、或者运算时间长,页面就会卡住(引擎好的会报错),用户体验就差了
前端首先要考虑低端配置的客户端,而不是认为客户端必然有“富余”
czheo
2015-06-16 13:18:18 +08:00
@imn1 你叫react那种把整个dom做成virtual dom的怎么整
sneezry
2015-06-16 13:25:18 +08:00
@czheo 同学写的非常好了,我就不写了 :P
oxyflour
2015-06-16 13:27:04 +08:00
https://gist.github.com/oxyflour/a90ecc4616587997c950

核心函数只要三行(然而你需要支持 es6 语法的环境,比如最新的 firefox
Septembers
2015-06-16 13:29:19 +08:00
@oxyflour 递归深度太深不会炸?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/198927

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX