添加数组作为另一个Array的元素

时间:2016-08-25 20:06:57

标签: javascript

我有一个像这样的数组

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

感谢您的帮助!

3 个答案:

答案 0 :(得分:1)

如果您不想要任何形式的依赖,请以这种方式使用Array.prototype.push.apply

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

答案 1 :(得分:0)

您没有提及任何错误,但我发现您在for循环中在x前面缺少owners时出现问题,并且{id}中的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) } }) }) 未初始化。这是一个一致的嵌套循环解决方案:

Sheets(1).Activate

答案 2 :(得分: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];
});
相关问题