2016-05-09 10 views
2

Ich habe zwei verschiedene Arrays, eines hält categories, während das andere pages hält.Was ist der richtige Weg, um eine Eigenschaft bestimmter Elemente aus einem anderen Array zu einem Objekt hinzuzufügen

Kategorien Array:

$scope.categories = [{ 
    id: 1, 
    name: "Test category" 
}]; 

Seiten Array:

$scope.pages = [{ 
    id: 1, 
    name: "Test page", 
    category: 1 
}]; 

Ich mag würde alle verknüpften Seiten seiner Kategorie hinzuzufügen. Dies kann erreicht werden, indem Sie wissen, ob die category-Eigenschaft für eine Seite der id einer Kategorie entspricht.

Im Moment habe ich eine Funktion, die

function getPagesById(categoryId) { 

    var tmp = []; 

    for (var i = $scope.pages.length - 1; i >= 0; i--) { 
    if($scope.pages[i].category == categoryId) { 
     tmp.push($scope.pages[i]); 
    } 
    }; 

return tmp; 

} 

function mergePages() { 

    var tmp = $scope.categories; 

    for (var i = tmp.length - 1; i >= 0; i--) { 

    tmp[i].pages = getPagesById(tmp[i].id); 

    }; 

    return tmp; 

} 

$scope.categories = mergePages(); 

Ist dies die richtige Winkel Art und Weise Schleifen durch dies zu erreichen?

+0

Die Lösung, die Sie vorschlagen, funktioniert, oder? –

+0

Ja, es ist mehr "Ich glaube nicht, dass ich es am besten mache" –

Antwort

3

Es gibt keine richtige oder falsche Antwort darauf. Wenn ich Ihre Frage so interpretiere, wie kann das kanalisieren? dann ja, kann es.

können Sie Angular filters verwenden, um Ihre mergePages Funktion in so etwas wie diese zu kondensieren: Dieses

function mergePages() 
{ 
    angular.forEach($scope.categories, function (category) 
    { 
     category['pages'] = $filter('filter')($scope.pages, {category: category.id}); 
    }); 
} 

wird durch den Vergleich der Kategorie-IDs im Filter $scope.categories mit den entsprechenden Seiten füllen.

Here's eine Geige, die es funktioniert zeigt.

+0

Total vergessen, einen Filter zu benutzen, danke! Es ist trotzig viel einfacher und sauber ... –

Verwandte Themen