2016-10-20 110 views
0

將對象從一個陣列推到另一個陣列所以我有一個新聞文章的列表,我需要它們被過濾,但服務器端不是客戶端。基於參數

我過濾的方法是通過一個下拉列表,用戶點擊篩選文章,像這樣:

<ul> 
    <li ng-repeat="category in categories"> 
     <span href="" ng-click="getFilteredArticles(category.id)">{{category.title}}</span> 
    </li> 
</ul> 

和文章都通過NG重複填充,像這樣

<ul infinite-scroll="addPosts()" infinite-scroll-distance="0" infinite-scroll-disabled="stopScrolling" class="c-news"> 
    <li ng-repeat="post in posts" class="c-news__item" ng-click="selectPost(post)"> 
     <!-- Omitted some code for the sake of brevity --> 
    </li> 
</ul> 

的getFilteredArticles方法看起來像這樣

$scope.getFilteredArticles = function (categoryId) { 

     var posts = $scope.posts; 

     posts.forEach((object) => { 
      if (object[Categories.Id] === categoryId) { 
       $scope.filteredArticles.push(object); 
      } 
     }); 

     console.log($scope.filteredArticles); 
    } 

一個典型的JSON對象,我很p通過外觀ulling這樣

{ 
    "Title":"Test Title", 
    "Summary":"", 
    "PublishedDate":"2016-10-17T09:42:00", 
    "Author":{ 
     "Id":"480586a5-2169-e611-9426-00155d502902", 
     "FirstName":"TestFirst", 
     "LastName":"TestSecond", 
     "Email":"[email protected]" 
    }, 
    "Id":99, 
    "StatusName":"Published", 
    "Status":2, 
    "Categories":[ 
     { 
      "Id":1, 
      "Name":"Category 1", 
      "ArticleCount":31, 
      "UnpublishedArticleCount":1 
     }, 
     { 
      "Id":2, 
      "Name":"Category 2", 
      "ArticleCount":19, 
      "UnpublishedArticleCount":0 
     } 
    ], 
    "AttachmentCount":0, 
    "FilesAwaitingCheckIn":0 
    } 

我想什麼發生的是,當用戶點擊過濾器的選擇之一,在列表中,然後過濾到單擊選擇。我有這麼遠,但後來我得到一個ReferenceError:分類沒有定義。

我基於我的getFilteredArticles()代碼從另一個Stack問題,可以發現here

我知道能夠過濾ng-repeat,但是我的管理員不想走這條路線,而寧願過濾服務器端,因爲我們可能會有帖子數量。

任何想法?

編輯 這裏是裏面有什麼$scope.posts array

+1

如果'Categories'是'posts'的屬性,則應該像這樣定義它 'object [「Categories」] [「Id」] === categoryId' – Nishant123

+0

感謝那個Nishant,那讓我失去了那個錯誤。現在console.log只是吐出一個空的數組。這是否可以歸因於每個類別ID都位於Categories對象內的單獨對象內? – Alsh

+0

我猜'if'條件沒有被滿足。你已經使用了一個嚴格的檢查'==='。檢查兩種類型是否相同。 ''2「'和'2'之間有區別。在'if'條件之前調試循環內的值 – Nishant123

回答

1

由於Categories是你需要遍歷數組得到一個arrayId

你的循環應該是類似這樣的

$scope.getFilteredArticles = function (categoryId) { 

     for(var i=0;i<$scope.posts.length;i++) 
     { 
      for(var j=0;j<$scope.posts[i]["Categories"].length;j++) 
      { 
      if($scope.posts[i]["Categories"][j]["Id"] == categoryId) 
       $scope.filteredArticles.push($scope.posts[i]) 
      } 
     } 
     console.log(JSON.stringify($scope.filteredArticles)); 
    };