3

In my AngularJS web app, How can I query a JSON object ?

For example in the below JSON object how can I find the value of reportTypeLabel where reportTypeId=3

JSON:

[  
   {  
      reportTypeId:5,
      reportTypeCode:"FINREP",
      reportTypeLabel:"Financial Reporting"
   },
   {  
      reportTypeId:9000002,
      reportTypeCode:"REM HE",
      reportTypeLabel:"High Earners"
   },
   {  
      reportTypeId:3,
      reportTypeCode:"COREP LE",
      reportTypeLabel:"Large Exposures - COREP"
   }
]
Peter Hornsby
  • 4,178
  • 1
  • 25
  • 43
Jay
  • 8,607
  • 10
  • 52
  • 90

4 Answers4

3

You can require $filter service and do

var elements = $filter('filter')(arrayOfObjects,{reportTypeId: 3});

elements will be an array of all the elements with that 'reportTypeId' i would recommend reading about angular filters and https://docs.angularjs.org/api/ng/service/$filter

Dayan Moreno Leon
  • 5,077
  • 2
  • 21
  • 24
1

If you're going to use data manipulation extensively, I'd highly recommend using a JS library, like underscore or lodash.

For example, using underscore:

// assuming your object is called data

var result = _.findWhere(data, {
    reportTypeId: 3
}).reportTypeLabel;
// result === 'Large Exposures - COREP'
ccjmne
  • 8,548
  • 3
  • 44
  • 59
1

You could do this

<div ng-repeat="report in reports | filter:{reportTypeId:'3'}">
    {{report.reportTypeCode}}
</div>

Working Fiddle

miensol
  • 36,699
  • 6
  • 110
  • 108
Sajeetharan
  • 203,447
  • 57
  • 330
  • 376
  • Many thanks. Would there be any performance issue if the volume of data is very huge ? when compared with the below underscore approach. – Jay Jan 20 '16 at 15:33
0

You can use regular filter function on array:

var items = [
  {reportTypeId:5, reportTypeCode:"FINREP"},
  {reportTypeId:9000002, reportTypeCode:"REM HE"}
];
var onlyMatching = items.filter(function(item){ return item.reportTypeId == 3; });

Or an angular filter in html

<div ng-repeat="item in items | filter: {reportTypeId: '3'}">{{item. reportTypeLabel}}</div>

Or an angular filter through $filter service

module.controller('ItemsCtrl', function($filter){
  $scope.filtered = $filter('filter')($scope.items,{ reportTypeId: '3' });
});
miensol
  • 36,699
  • 6
  • 110
  • 108