2017-09-21 26 views
1

に特定の値を結合し、jsonをループして特定の値を結合し、それらのループを繰り返します。jsonループから多次元配列を作成し、グループ

var json = [ 
    {title: "title1", type: "group1"} 
    {name: "name1", type: "in"} 
    {name: "name2", type: "out"} 
    {name: "name3", type: "out"} 
    {title: "title2", type: "group2"} 
    {name: "name4", type: "out"} 
]; 

var obj = {}, 
    count = 0; 

for (var i=0; i < json.length; i++){ 
    if('name' in json[i]){ 
     var obj[count].push(json[i]) 
    }else{ 
     count++; 
    } 
} 

新しく作成されたグループをループするために適切な名前のグループにタイトルを追加するにはどうすればよいですか?

新しく作成されたグループ1は

[ 
    {title: "title1", type: "group1"}, 
    {name: "name1", type: "in"}, 
    {name: "name2", type: "out"}, 
    {name: "name3", type: "out"} 
] 

であるべきで、新しく作成されたグループ2は

[ 
    {title: "title2", type: "group2"}, 
    {name: "name4", type: "out"} 
] 
+0

あなたのオブジェクトは、あなたの質問が明確ではない – marvel308

+0

有効な形式ではありません。あなたのjsonも有効なオブジェクトではありません。あなたの投稿をより明確に編集してください。 – codeslayer1

+0

コード – user1751287

答えて

1

あなたは新しいグループが開始されているかどうかをチェックするためにtitleプロパティを使用することができなければなりません。その場合は、配列内の実際のオブジェクトを結果セットにプッシュし、そうでなければ実際のオブジェクトを最後の配列にプッシュします。

var array = [{ title: "title1", type: "group1" }, { name: "name1", type: "in" }, { name: "name2", type: "out" }, { name: "name3", type: "out" }, { title: "title2", type: "group2" }, { name: "name4", type: "out" }], 
 
    result = array.reduce(function (r, o) { 
 
     if ('title' in o) { 
 
      r.push([o]); 
 
     } else { 
 
      r[r.length - 1].push(o); 
 
     } 
 
     return r; 
 
    }, []); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

関連する問題