0

使用 javascript 我有一个数组

[{"id":171,
"children":
    [{"id":172},
    {"id":170},
    {"id":173}]},
{"id":174},
{"id":175}]

这是由一个可嵌套的 jQuery 列表组成的

我现在需要将其推入另一个数组,该数组的结构为 id、top_menu、submenu

我正在尝试运行一个 for 循环来查找“,”,然后逗号之前的内容决定它是否是 sub_menu 项目的 top_menu 项目,如果它是 sub_menu 项目,它的父菜单是什么

我已经尝试了大约 15 种不同的循环,但都在一个级别或另一个级别上失败了。

我是否缺少可以轻松执行此操作的功能?

我一直在使用 str.split(','); 找到逗号,然后使用 search 和 substr 来尝试确定菜单的级别。

非常感谢任何帮助

4

2 回答 2

0
var menu =[{"id":171,
"children":
    [{"id":172},
    {"id":170},
    {"id":173}]},
{"id":174},
{"id":175}];

for( node in menu){
    console.log(node);
    if(menu[node].children){
        //submenu logic here
        console.log(menu[node].children);   
    }
}

我认为我的语法可以稍微清理一下,但这会解析一个嵌套数组。

于 2013-07-12T15:47:22.667 回答
0

我设法解决了这个问题,但将字符串重建为可以轻松推入数组的格式

这是代码

var str='[{"id":170},{"id":171,"children":[{"id":172},{"id":173}]},{"id":174,"children":[{"id":176},{"id":177}]},{"id":175}]';

for(var d=0; d<str.length;d++){
  if(newstr!=''){str=newstr;}           
    var childrenstart=str.indexOf("children");
    if(childrenstart!="-1"){
       var endstr=str.substr(childrenstart).indexOf("]");;
   var childrenstring=str.substr(childrenstart,endstr);
   var cleanchildrenstr=childrenstring.replace(/children":/gi,'');
   var newchildrenstrng=cleanchildrenstr.replace(/id/gi,'child');
   newstr=str.substr(0,childrenstart-1)+newchildrenstrng+str.substr(childrenstart+endstr);
   d=childrenstart+endstr;
 } else {
   d=str.length;
 }
}

 var finalstr=str.replace(/{/gi,'');        
 var finalstr=finalstr.replace(/}/gi,'');       
 var finalstr=finalstr.replace(/]/gi,'');       
 var finalstr=finalstr.replace(/\[/gi,'');      
 var finalstr=finalstr.replace(/\"/gi,'');

我知道这可以写得更聪明、更整洁,但它是初稿并且有效。这将返回一个字符串

id:170,id:171,child:172,child:173,id:174,id:175

可以切碎并推入阵列

于 2013-07-14T05:26:09.507 回答