2016-08-25 2 views
0

У меня есть массив как этотДобавить массив как элемент другого массива

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

И второй массив, как это:

$scope.owners = [ 
    { name: 'Mary', breedowned: 'German Shepherd' }, 
    { name: 'Bill', breedowned: 'German Shepherd' }, 
    { name: 'Bob', breedowned: 'Collie' } 
] 

Я хочу, чтобы подтолкнуть список владельцев в список собак как и в основном создания:

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

Я пытался использовать forEach и нажмите owners в dogs массив, но он не работает.

 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

Не думайте, что это работает, потому что это объединит первый массив во второй. Спроситель хочет, чтобы владельцы подтолкнули владельца к самой собаке. – agmcleod

+0

Вот почему я указал «Если вы не хотите никакой формы зависимости». Вопрос не был ясен на 100%. – Luxor001

0

, которого не говоря уже о каких-либо ошибках, но я вижу проблему с Соскучился var перед й в цикл for, а также owners не инициализируется в объекте собаки. Вот последовательное вложенная решение цикла:

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

Проблема в том, что я получаю массив собак от вызова, поэтому он не инициализируется. Если инициализировано, моя оригинальная попытка работает, но спасибо. Я собираюсь попробовать ваше решение. – 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]; 
}); 
Смежные вопросы