0

多次元オブジェクトまたは配列をAngular/JSで作成する方法を理解する必要があります。このJSFiddleは、問題をはっきりと説明する必要があります。https://jsfiddle.net/s3etbdyj/5/多次元/ネストされたオブジェクトを角度(ネストされたforEachループ)で作成する

forEachループ内のforEachループはどうやってできますか?要約すると:

私のアプリケーションには表示しやすいデータがあります。

"albums":[{ 
    "album_id": 1, 
    "album_title": "Test Release", 
    "created_at": "-0001-11-30 00:00:00", 
    "updated_at": "-0001-11-30 00:00:00", 
    "songs": [{ 
     "id": 114, 
     "title": "Test song", 
    }, { 
     "id": 115, 
     "title": "Test song 2", 
    }], 
    }, { 
    "album_id": 2, 
    "album_title": "Blood Sugar Sex Magik", 
    "created_at": "-0001-11-30 00:00:00", 
    "updated_at": "-0001-11-30 00:00:00", 
    "songs": [{ 
     "id": 116, 
     "title": "Give It Away", 
    }, { 
     "id": 117, 
     "title": "Under The Bridge", 
    }], 
}] 

あなたが見ることができるように、それぞれの「アルバム」オブジェクトは、その中にいくつかの「歌」のオブジェクトを持つことができます。

私は、このデータをループする必要があると(私は物事を追加し、私は合うようにそれをフォーマットすることができるように)それを再構築

私は、この構造では、ネストされたオブジェクトデータを作成するにはどうすればよいですか?これまで私が持っていたことは次のとおりです。

$scope.newData = []; 

     // create formatted song list 
     angular.forEach($scope.origData, function(m) { 
       $scope.newData.push({ 
        'album_id' : m.album_id, 
        'album_title'  : m.album_title, 
       }); 
       angular.forEach(m.songs, function(tr) { 
        var obj = { 
         id: tr['id'], 
         title: tr['title'], 
           } 
        $scope.newData.push(obj); 
       }); 
     }, $scope.newData) 

しかし、これはうまくいきません。これは、フラットな構造を作成します。

Object: 
    { 
    "album_id": 1, 
    "album_title": "Test Release", 
    "created_at": "-0001-11-30 00:00:00", 
    "updated_at": "-0001-11-30 00:00:00", 
    } 
    Object: 
     { 
     "id": 114, 
     "title": "Test song", 
     } 
    Object: 
     { 
     "id": 115, 
     "title": "Test song 2", 
     } 
    etc... 

はJSfiddleを見てください:https://jsfiddle.net/s3etbdyj/5/ は、誰もがこのようにネストされたオブジェクトの作成方法を説明し、私のあるnewDataはちょうど私のorigDataのように見せることができます!おかげさまで

+0

so。あなたはどこで曲をプッシュしていますか?現在、あなたはアルバムをプッシュしている同じレベルにプッシュしています。 –

+0

私は欲しいそれぞれのアルバム内の "曲"というオブジェクトにそれらをプッシュする。しかし、私は文法を正しく得ることができない! – Leon

答えて

2

これを試してください:あなたは$ scope.newDataにすべてをプッシュしている

$scope.newData = []; 

    // create formatted song list 
    angular.forEach($scope.origData, function(m) { 
      var album = { 
       'album_id': m.album_id, 
       'album_title': m.album_title, 
       'songs': [] 
      }; 
      $scope.newData.push(album); 
      angular.forEach(m.songs, function(tr) { 
       var obj = { 
        id: tr['id'], 
        title: tr['title'], 
       }; 
       album.songs.push(obj); 
      }); 
    }, $scope.newData); 
+0

それはそれを得た!ありがとう。 – Leon

1

、もちろんそれはフラットです。最初にアルバムオブジェクトを作成してから、2番目のループでソングをソングの配列にプッシュしてみてください。次のようなものがあります。

var album = {title: "whatever"、songs:[]、...}; angular.forEach(m.songs、機能(TR){album.songs.push({タイトル: "何でも"、...}) } $ scope.newData.push(アルバム);

申し訳ありません私が電話していないときに私はそれを修正します。

関連する問題