Amy*_*yth 3 javascript angularjs
在我的角度应用程序的一个控制器中,我有一个变量集如下.
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;
});
Run Code Online (Sandbox Code Playgroud)
现在$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 ...},
]
Run Code Online (Sandbox Code Playgroud)
我想要做的是使用id属性(而不是列表索引)在xyz中获取一个对象.我知道我可以按如下方式迭代数组.
angular.forEach($scope.xyz, function(obj){ return obj.id == 1;});
Run Code Online (Sandbox Code Playgroud)
但有没有办法我可以做到而不循环列表?
虽然这已经在一年前得到解答,因为这是谷歌的最佳成果之一,我想我可以添加以下建议,这可能是最简单的过滤方式.将$ filter注入控制器后,
var result = $filter('filter')($scope.xyz, {id:"1"});
Run Code Online (Sandbox Code Playgroud)
参考:https: //docs.angularjs.org/api/ng/filter/filter
不,O(n)除非满足一些先决条件,否则你无法真正避免循环().
O(log n)).O(1).如果最初没有满足这些条件,但您需要多次访问id的项目,那么将它们放入该表单(排序/构建哈希映射)可能会有所帮助.