首页 新闻 赞助 找找看

谁帮我用js拼个数组,

0
悬赏园豆:160 [已解决问题] 解决于 2016-09-19 16:10

如图,拼成图一的数组,数据在图二图三,我吧所有园豆都给了

问题补充:

 

这是我自己弄的一个,但是还是有问题,准备后面用eval将这个字符串转成数组

-忘川-的主页 -忘川- | 初学一级 | 园豆:23
提问于:2016-09-19 11:29
< >
分享
最佳答案
1

菜单路径url是哪个字段?

收获园豆:160
JackWang-CUMT | 老鸟四级 |园豆:2866 | 2016-09-19 11:47

路径可以先空着,

-忘川- | 园豆:23 (初学一级) | 2016-09-19 11:48

layout字段,数据库中还没填值

-忘川- | 园豆:23 (初学一级) | 2016-09-19 11:49

@流沙°: 

    <script type="text/javascript">
          var result = [];
          result.push({ id: 'YN01', name: '菜单A', parentid: 'YN', location: '' });
          result.push({ id: 'YN0101', name: '菜单A1', parentid: 'YN01', location: '' });

          result.push({ id: 'YN0102', name: '菜单A2', parentid: 'YN01', location: '../menua.html' });
          result.push({ id: 'YN010201', name: '菜单A11', parentid: 'YN0101', location: '../menua.html' });

          var navigates = "[";
          function buildMenu(nodes) {
              var gc = function (parentid) {
                  var cn = [];
                  for (var i = 0; i < nodes.length; i++) {
                      var n = nodes[i];
                      var n2 = {};
                      if (n.parentid === parentid) {
                          n2.text = n.name;
                          n2.url = n.location;
                          n2.children = gc(n.id);
                          cn.push(n2);
                      }
                  }
                  return cn;
              }
              return gc('YN');
          }
          var newnodes = buildMenu(result);
          var str = JSON.stringify(newnodes);
         
          str = str.replace(/{"text":/g, "").replace(/"url":""/g, "").replace(/"url":/g, "").replace(/,"children":\[\]}/g, "").replace(/,"children":/g, "").replace(/}/g, "");
        

          var navigate = JSON.parse(str);  
          alert(navigate); 
          console.log(navigate);

       
      </script>

JackWang-CUMT | 园豆:2866 (老鸟四级) | 2016-09-19 13:17

@流沙°: 用递归来构建树数组,以贴出代码。

JackWang-CUMT | 园豆:2866 (老鸟四级) | 2016-09-19 13:18

@JackWang-CUMT: 

复制你的

-忘川- | 园豆:23 (初学一级) | 2016-09-19 13:37

@流沙°: 初始数据你要改的,return gc('YN')改成模块的最顶级ID

JackWang-CUMT | 园豆:2866 (老鸟四级) | 2016-09-19 13:44

@JackWang-CUMT: 要是最顶级id数据不止一个呢?

-忘川- | 园豆:23 (初学一级) | 2016-09-19 13:45

@流沙°: 另外你的parent_id,我的是parentid,你要把字段修改成你的

JackWang-CUMT | 园豆:2866 (老鸟四级) | 2016-09-19 13:46

@JackWang-CUMT: 

-忘川- | 园豆:23 (初学一级) | 2016-09-19 13:49

@流沙°: 那也可以,如果多个顶级,那么parent_id一般为空,直接写成return gc('')

JackWang-CUMT | 园豆:2866 (老鸟四级) | 2016-09-19 13:49

@JackWang-CUMT: 

还是没数据,看看我改的对不对

-忘川- | 园豆:23 (初学一级) | 2016-09-19 13:53

@流沙°: 

 1   function buildMenu(nodes) {
 2               var gc = function (parentid) {
 3                   var cn = [];
 4                   for (var i = 0; i < nodes.length; i++) {
 5                       var n = nodes[i];
 6                       var n2 = {};
 7                       if (n.parentId === parentid) {
 8                           n2.text = n.name;
 9                           n2.url = n.location;
10                           n2.children = gc(n.id);
11                           cn.push(n2);
12                       }
13                   }
14                   return cn;
15               }
16               return gc('');
17           }
18           var newnodes = buildMenu(result);
19           var str = JSON.stringify(newnodes);
20          
21           str = str.replace(/{"text":/g, "").replace(/"url":""/g, "").replace(/"url":/g, "").replace(/,"children":\[\]}/g, "").replace(/,"children":/g, "").replace(/}/g, "");
22         
23 
24           var navigate = JSON.parse(str);  
25           alert(navigate); 
26           console.log(navigate);
JackWang-CUMT | 园豆:2866 (老鸟四级) | 2016-09-19 13:57

@JackWang-CUMT: 

-忘川- | 园豆:23 (初学一级) | 2016-09-19 14:01

@流沙°: 加我QQ 308106637

JackWang-CUMT | 园豆:2866 (老鸟四级) | 2016-09-19 14:02

@流沙°: 

function buildMenu(nodes) {
var gc = function (parentid) {
var cn = [];
for (var i = 0; i < nodes.length; i++) {
var n = nodes[i];
var n2 = {};
if (n.parentId === parentid) {
n2.text = n.name;
n2.url = n.location;
n2.children = gc(n.id);
cn.push(n2);
}
}
return cn;
}
return gc('');
}
var newnodes = buildMenu(result);
var str = JSON.stringify(newnodes);
//console.log(str);


console.log(str);
str = str.replace(/"text":/g, "").replace(/"url":""/g, "").replace(/"url":/g, "").replace(/,"children":\[{/g, "[").replace(/,"children":\[\]/g, "]").replace(/}/g, "").replace(/{/g, "[");
//str = "[" + str + "]";
console.log(str);
var navigate = JSON.parse(str);
alert(navigate);
console.log(navigate);

JackWang-CUMT | 园豆:2866 (老鸟四级) | 2016-09-19 16:08
其他回答(5)
0

为什么一定要在js处理,你可以看成两张表join,返回一个对象集合,属性是父节点name,对于子节点的的对象集合

[3] | 园豆:1174 (小虾三级) | 2016-09-19 11:41

要求必须要用js处理啊

支持(0) 反对(0) -忘川- | 园豆:23 (初学一级) | 2016-09-19 11:41
0

把你数据库里的菜单数据查出来然后转换为Json数据补充上去先。不用全部,一部分即可。但是得有关联。才能给你继续。给点初始数据别人好帮忙嘛!

大楚打码人 | 园豆:4313 (老鸟四级) | 2016-09-19 11:51
0

你现在result[0]里面的数据是第一根节点及其子节点数据吗

小小高 | 园豆:1095 (小虾三级) | 2016-09-19 11:51

建议你把result的json数据发出来,用递归处理比你写判断好

支持(0) 反对(0) 小小高 | 园豆:1095 (小虾三级) | 2016-09-19 12:02

@小小高: 但是这个是根据权限取的数据,并没有取所有的,这样可以吗?

支持(0) 反对(0) -忘川- | 园豆:23 (初学一级) | 2016-09-19 12:03

@流沙°: 我说的是树的层级,只能有3级吗

支持(0) 反对(0) 小小高 | 园豆:1095 (小虾三级) | 2016-09-19 12:10

@小小高: 对的,就跟图一一样

支持(0) 反对(0) -忘川- | 园豆:23 (初学一级) | 2016-09-19 12:31
0

为什么要拼?

顾晓北 | 园豆:10844 (专家六级) | 2016-09-19 13:23
0

这个数组就是乱搞的吧。

按你这个定义,最接近的结果定义:

一个多层数组,每个数组的0号位置是一个字符串(标题),1-N是n-1个下层数组。

大体这个样子,不过我不知道你最后一级如何区分是属性(url),还是更下一级的菜单,先这样吧。

[ [ "menu-1", ["sub-menu-1-1", ...], ["sub-menu-1-2", ...]...]

  [ "menu-2", ["sub-menu-2-1", ...], ["sub-menu-2-1", ...]...]

  ...

]

而原始结构是

database = [{ "menu-1", parent: 0, id: "YN-1"}

{"sub-menu-1-1", parent: "YN-1", id: "YN-1-1" ...}

{"sub-menu-1-2", parent: "YN-1", id: "YN-1-2", ...}

...

]

让子结点快速找到父结点,需要一个Hash表, 注意top那个空数组,用来放顶级节点。

hash = {"top": [],

  "YN-1" : [ "menu-1",],

  "YN-1-1": ["sub-menu-1-1", ...]

  "YN-1-2": ["sub-menu-1-2", ...]

}

希望可以把子节点添加到父节点上后面,包括顶级节点,放到top对应的数组中。

top就是最后需要的数组。

代码如下

var mkMenu;

mkMenu = function(database) {
  var  h = {YN: [] };
  database.forEach(function(item) {
    return h[item.id] = [item.name];
  });
  database.forEach(function(item) {
    return h[item.parent_id].push(h[item.id]);
  });
  return h['YN'];
};

 

Anthony-黄亮 | 园豆:219 (菜鸟二级) | 2016-09-19 14:16
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册