【问题标题】:Create multidimensional / nested object in Angular (nested forEach loops)在 Angular 中创建多维/嵌套对象(嵌套的 forEach 循环)
【发布时间】:2017-02-07 17:38:23
【问题描述】:

我需要了解如何在 Angular / JS 中创建多维对象或数组。这个 JSFiddle 应该清楚地解释问题:https://jsfiddle.net/s3etbdyj/5/

如何在 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,从而解释嵌套对象是如何创建的?! 谢谢。

【问题讨论】:

  • 所以。你应该把歌曲推到哪里?目前,您正在将它们推送到您推送专辑的同一级别。
  • 我想在每张专辑中将它们推送到一个名为“歌曲”的对象中。但我无法正确使用语法!

标签: javascript angularjs arrays multidimensional-array foreach


【解决方案1】:

试试这个:

  $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);

【讨论】:

  • 明白了!谢谢。这有助于我更好地理解发生了什么!
【解决方案2】:

您将所有内容都推入 $scope.newData,当然它是平坦的。尝试首先创建专辑对象,然后在第二个循环中将歌曲推入其歌曲数组。类似的东西:

var album = { title : "whatever", song: [], ...}; angular.forEach(m.songs, function(tr){ album.songs.push({title: "whatever",...}) } $scope.newData.push(专辑);

对不起,我不在手机上时会修复它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-05-16
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 2018-03-23
    • 2015-07-06
    相关资源
    最近更新 更多