我有一个像这样的数组
$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])
}
}
});
感谢您的帮助!
答案 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];
});