在我的角度应用程序的一个控制器中,我有一个变量集如下。
SomeService.get({}, function(data){
// this sets xyz as the list of the data retrieved
// from the resource within the controllers scope
$scope.xyz = data.objects;
});
现在$scope.xyz
看起来像
[
0: {id: 1, ...more data here ...},
1: {id: 2, ...more data here ...},
2: {id: 3, ...more data here ...},
3: {id: 4, ...more data here ...},
4: {id: 5, ...more data here ...},
5: {id: 6, ...more data here ...},
]
我要做的是使用id
属性(而不是列表索引)在xyz中获取对象。我知道我可以按如下方式迭代数组。
angular.forEach($scope.xyz, function(obj){ return obj.id == 1;});
但有没有办法可以在没有循环列表的情况下完成呢?
答案 0 :(得分:8)
虽然这已在一年前得到解答,因为这是谷歌的最佳成绩之一,我想我可以添加以下建议,这可能是最简单的过滤方式。 将$ filter注入控制器后,
var result = $filter('filter')($scope.xyz, {id:"1"});
答案 1 :(得分:5)
不,除非满足一些先决条件,否则你无法真正避免循环(O(n)
)。
O(log n)
)。O(1)
中直接访问它。如果最初没有满足这些条件,但您需要多次访问id项,那么将它们放入该表单(排序/构建哈希映射)可能会有所帮助。