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 に答える