在Angular中,我需要search数组中的对象

在Angular中,我的范围是一个返回大量对象的对象。 每个人都有一个ID(这是存储在一个平面文件,所以没有数据库,我似乎无法用户ng-resource

在我的控制器中:

 $scope.fish = [ {category:'freshwater', id:'1', name: 'trout', more:'false'}, {category:'freshwater', id:'2', name:'bass', more:'false'} ]; 

在我看来,我有更多关于默认隐藏的鱼的更多信息,但是当我点击简单显示更多选项卡时,我想调用函数showdetails(fish.fish_id) 。 我的function看起来像这样:

 $scope.showdetails = function(fish_id) { var fish = $scope.fish.get({id: fish_id}); fish.more = true; } 

现在看来更多的细节出现了。 然而,通过search文件后,我无法弄清楚如何searchfisharrays。

那么如何查询数组呢? 并在控制台中如何调用debugging器,以便我有$scope对象来玩?

我知道这可以帮助你一点。

这是我试图为你模拟的东西。

检出jsFiddle;)

http://jsfiddle.net/migontech/gbW8Z/5/

创build了一个filter,你也可以在'ng-repeat'

 app.filter('getById', function() { return function(input, id) { var i=0, len=input.length; for (; i<len; i++) { if (+input[i].id == +id) { return input[i]; } } return null; } }); 

控制器中的用法:

 app.controller('SomeController', ['$scope', '$filter', function($scope, $filter) { $scope.fish = [{category:'freshwater', id:'1', name: 'trout', more:'false'}, {category:'freshwater', id:'2', name:'bass', more:'false'}] $scope.showdetails = function(fish_id){ var found = $filter('getById')($scope.fish, fish_id); console.log(found); $scope.selected = JSON.stringify(found); } }]); 

如果有任何问题,请让我知道。

您可以使用现有的$筛选器服务。 我更新了上面的提琴http://jsfiddle.net/gbW8Z/12/

  $scope.showdetails = function(fish_id) { var found = $filter('filter')($scope.fish, {id: fish_id}, true); if (found.length) { $scope.selected = JSON.stringify(found[0]); } else { $scope.selected = 'Not found'; } } 

Angular文档在这里http://docs.angularjs.org/api/ng.filter:filter

要添加@ migontech的答案,他的地址他的评论,你可以“可能使它更通用”,这是一个办法做到这一点。 以下将允许您search任何财产:

 .filter('getByProperty', function() { return function(propertyName, propertyValue, collection) { var i=0, len=collection.length; for (; i<len; i++) { if (collection[i][propertyName] == +propertyValue) { return collection[i]; } } return null; } }); 

filter的调用将会变成:

 var found = $filter('getByProperty')('id', fish_id, $scope.fish); 

请注意,我删除了一元(+)运算符,以允许基于string的匹配…

一个肮脏和简单的解决scheme可能会像

 $scope.showdetails = function(fish_id) { angular.forEach($scope.fish, function(fish, key) { fish.more = fish.id == fish_id; }); }; 

Angularjs已经有filter选项来做到这一点, https: //docs.angularjs.org/api/ng/filter/filter

你的解决scheme是正确的,但不必要的复 您可以使用纯JavaScript的过滤function 。 这是你的模型:

  $scope.fishes = [{category:'freshwater', id:'1', name: 'trout', more:'false'}, {category:'freshwater', id:'2', name:'bass', more:'false'}]; 

这是你的function:

  $scope.showdetails = function(fish_id){ var found = $scope.fishes.filter({id : fish_id}); return found; }; 

你也可以使用expression式:

  $scope.showdetails = function(fish_id){ var found = $scope.fishes.filter(function(fish){ return fish.id === fish_id }); return found; }; 

更多关于这个function: LINK

看到这个线程,但我想search与我的search不匹配的ID。 代码做到这一点:

 found = $filter('filter')($scope.fish, {id: '!fish_id'}, false);