2016-08-25 7 views
0

の要素として配列を追加します。私はこのは別のアレイ

$scope.dogs = [ 
    { id: 1, breed: 'German Shepherd' }, 
    { id: 2, breed: 'Collie' } 
] 

そして、このような二番目の配列のような配列を持っています以下のようなので、基本的に作成:

$scope.dogs = [ 
    { id: 1, breed: 'German Shepherd', owners: [...] } 
] 

私はにownersforEachを使用してプッシュしてみました配列ですが、動作しません。

 angular.forEach($scope.dogs, function (value, key) { 

      for (x = 0; x < $scope.owners.length; x++) { 
       if ($scope.owners[i].breedowned == value.breed) { 
        $scope.dogs[key].owners.push($scope.owners[i]) 
       } 
      } 
    }); 

ありがとうございました!

答えて

1

あなただけArray.prototype.push.applyを使用し、依存関係の任意のフォームをしたくない場合は、この方法:

Array.prototype.push.apply($scope.owners, $scope.dogs); 
+0

これは、最初の配列を2番目の配列にマージするため、動作しないと思わないでください。質問者は、所有者が犬の所有者の配列にプッシュすることを望んでいます。 – agmcleod

+0

だから、私は "あなたがどんな形の依存関係も望まないなら"と指定したのです。質問は100%ではっきりしていませんでした。 – Luxor001

0

あなたはすべてのエラーを言及していませんでしたが、私はあなたがxの前で中varの欠落の問題を参照してくださいforループ、およびownersはdogオブジェクトで初期化されません。

angular.forEach($scope.dogs, function (dog) { 
    angular.forEach($scope.owners, function (owner) { 
     if (owner.breedowned == dog.breed) { 
      dog.owners = dog.owners || [] 
      dog.owners.push(owner) 
     } 
    }) 
}) 
+0

問題は、コールからdogs配列を受け取るため、初期化されていないことです。初期化されていれば、私の元の試みはうまくいくが、感謝する。私はあなたの解決策を試してみるつもりです。 – BSmall

+0

うん、それは完全に大丈夫です、ちょうどそれが仕事をしなかった理由を説明してください:) – agmcleod

0

ここでは、よりよい解決策に一度だけ犬配列を通じて一度だけ所有者の配列を通過する:ここで一貫したネストされたループソリューションです。

var tracker = $scope.owners.reduce(function(trackerObj, owner){ 
    var breedowned = owner.breedowned; 
    trackerObj[breedowned] = trackerObj[breedowned] || []; 
    trackerObj[breedowned].push(owner); 
    return trackerObj; 
}, {}); 
$scope.dogs.forEach(function(dog){ 
    dog.owners = tracker[dog.breed]; 
}); 
関連する問題